您的位置:首页 > 其它

用最笨的办法搞定-----cgi接收form表单上传的图片

2017-12-13 00:00 357 查看
摘要: 即使这样,我也满足,完成了一个功能。
----------------------------------------

唯一的不足就是前端限定上传文件的名称必须是logo_oem.png,

必须是png格式是由于前端的原因,

但是名称必须是logo_oem

前端限定

//检查文件是否合法
function checkUploadFiles(name) {
var errObj = {
error:0,
errorMsg:'No error'
};
var strRegex = "logo_oem.(png)$";
var re = new RegExp(strRegex);
if (!re.test(name)) {
errObj.error++;
errObj.errorMsg = 'Please upload the correct file format.(logo_oem.png)';
}
return errObj;
}

上传图片

var oData = new FormData(document.forms.namedItem("uploadFileForm"));
console.log(oData);
$.ajax({
url: GlobalSpace.json_debug?GlobalSpace.debugUrl:"/oem_upload_cgi",
type: "POST",
cache: false,
processData: false,
contentType: false,
enctype: 'multipart/form-data',
data: oData,
beforeSend: function(xhr){
xhr.setRequestHeader('Authorization', datas);
},
complete: function(xhr,status){

},
error: function(xhr,status,error){
alert("Request error!");
},
success: function(result){
console.log("表单提交成功!");
}
});

cgi处理接收到的图片

#include "fcgi_stdio.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "cJSON.h"

//    /hpb/nginx/spawn-fcgi -a 127.0.0.1 -p 9001 -C 5 -u nobody -g nobody -f /hpb/nginx/html/cgi/upload.cgi -n

#include "./web.h"

int main() {

while (FCGI_Accept() >= 0) {
printf("Content-type: text/html\n\n");

char *upload_file = NULL, *readstr = NULL;
int file_total_length = 0;
FILE *fd = NULL;

// 根据内容长度,判断是否有上传文件
upload_file = getenv("CONTENT_LENGTH");
//  printf("upload_file: %s\n",upload_file);
if (upload_file){
file_total_length = atoi(upload_file);
} else {
printf("Getenv Error!");
return 0;
}
// printf("file_total_length: %d\n",file_total_length);

// 根据文件大小,分配内存
readstr = malloc(file_total_length);

// 将数据写入 readstr 缓存
// fread("用于接收数据的内存地址", "要读的每个数据项的字节数,单位是字节", "要读count个数据项,每个数据项size个字节.", "输入流")
// 返回真实读取的项数
size_t counts = fread(readstr, 1, file_total_length, stdin);
/*  printf("readstr: %s\n",readstr);
printf("readstr+0x99: %s\n", readstr+0x99);
printf("counts-0x99-44: %d\n", counts-0x99-44);
printf("counts: %d\n", counts);*/

// 新建一个文件
fd = fopen("/home/upgrade/logo_oem.png", "wb");

// 将数据写入这个文件
// fwrite("是要获取数据的地址", "要写入内容的单字节数", "要进行写入size字节的数据项的个数", "目标文件指针")
fwrite(readstr+0x8b, 1, counts-0x99-44, fd);

// 关闭文件
fclose(fd);

// 释放分配的内存
free(readstr);

// 将图片mv
system("rm -rf /hpb/nginx/html/images/logo_oem.png");
system("cp /home/upgrade/logo_oem.png /hpb/nginx/html/images/");
system("chmod 777 /hpb/nginx/html/images/logo_oem.png");

system("rm -rf /hpb/nginx/oem_html/oem/images/logo_oem.png");
system("cp /home/upgrade/logo_oem.png /hpb/nginx/oem_html/oem/images/");
system("chmod 777 /hpb/nginx/oem_html/oem/images/logo_oem.png");

}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: