用最笨的办法搞定-----cgi接收form表单上传的图片
2017-12-13 00:00
357 查看
摘要: 即使这样,我也满足,完成了一个功能。
----------------------------------------
唯一的不足就是前端限定上传文件的名称必须是logo_oem.png,
必须是png格式是由于前端的原因,
但是名称必须是logo_oem
----------------------------------------
唯一的不足就是前端限定上传文件的名称必须是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; }
相关文章推荐
- Spring MVC 多图片上传 ajax form表单 参数 提交后台
- 使用FormData对象提交表单及上传图片
- 基于cherrypy利用form表单上传一张图片的方法介绍
- jfinal利用form表单同时上传图片和text
- ENCTYPE="multipart/form-data"用于表单里有图片上传
- 一个form表单中,上传和接收多个相同的name字段参数
- 关于JFinal的单个input标签type=file的multiple="multiple"多图片上传,每次只接收到一个uploadFile对象的解决办法。
- Swift使用Alamofire上传图片等FormData表单文件的方法
- form表单文件上传 servlet文件接收
- 通过formdata ajax上传图片 以及后台接收formdata数据 mvc
- java接收IOS上传的图片文件multipart/form-data类型
- 使用FormData对象提交表单及上传图片
- Ajax对Form表单图片的局部上传
- 图片上传-form表单还是base64-前端图片压缩
- 使用FormData对象提交表单及上传图片
- Form表单上传图片获取不到其他值
- php 图片上传之利用form表单上传
- java模拟form表单上传图片
- 使用FormData对象提交表单及上传图片
- Ios form表单上传图片(包含压缩图片)