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

唯一的不足就是前端限定上传文件的名称必须是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;
}


转载于:https://my.oschina.net/yj1993/blog/1589082

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值