您的位置:首页 > 其它

CGI上传文件以及大小限制修改

2017-02-07 11:05 344 查看
BOA+CGIC,发现用它那个测试程序上传文件时只能传1MB大小左右,后来搜索网络,发现是BOA搞的鬼,方法2种:

1、修改源代码的defines.h里面的宏SINGLE_POST_LIMIT_DEFAULT

2、修改boa.conf里面的SinglePostLimit

cgic文件命令为:upload.c
#include<stdio.h>

#include<string.h>

#include<unistd.h>

#include<fcntl.h>

#include<sys/stat.h>

#include"cgic.h"

#define BufferLen 1024

int cgiMain(void){

    cgiFilePtr file;

    int    targetFile;

    mode_t    mode;

    char name[128];

    char fileNameOnServer[64];

    char contentType[1024];

    char buffer[BufferLen];

    char *tmpStr=NULL;

    int size;

    int got,t;

    cgiHeaderContentType("text/html");

    //取得html页面中file元素的值,应该是文件在客户机上的路径名

    if (cgiFormFileName("file", name, sizeof(name)) !=cgiFormSuccess) {

        fprintf(stderr,"could not retrieve filename\n");

        goto FAIL;

    } 

    cgiFormFileSize("file", &size);

    //取得文件类型,不过本例中并未使用

    cgiFormFileContentType("file", contentType, sizeof(contentType));

    //目前文件存在于系统临时文件夹中,通常为/tmp,通过该命令打开临时文件。临时文件的名字与用户文件的名字不同,所以不能通过路径/tmp/userfilename的方式获得文件

    if (cgiFormFileOpen("file", &file) != cgiFormSuccess) {

        fprintf(stderr,"could not open the file\n");

        goto FAIL;

    }

    t=-1;

    //从路径名解析出用户文件名

    while(1){

        tmpStr=strstr(name+t+1,"\\");

        if(NULL==tmpStr)

            tmpStr=strstr(name+t+1,"/");//if "\\" is not path separator, try "/"

        if(NULL!=tmpStr)

            t=(int)(tmpStr-name);

        else

            break;

    }

 strcpy(fileNameOnServer,"./getfile/");

    strcat(fileNameOnServer,name+t+1);

    mode=S_IRWXU|S_IRGRP|S_IROTH;    

    //在当前目录下建立新的文件,第一个参数实际上是路径名,此处的含义是在cgi程序所在的目录(当前目录))建立新文件    

    targetFile=open(fileNameOnServer,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,mode);

    if(targetFile<0){

        fprintf(stderr,"could not create the new file,%s\n",fileNameOnServer);

        goto    FAIL;

    }

    //从系统临时文件中读出文件内容,并放到刚创建的目标文件中

    while (cgiFormFileRead(file, buffer, BufferLen, &got) ==cgiFormSuccess){

        if(got>0)

            write(targetFile,buffer,got);    

    }

    cgiFormFileClose(file);

    close(targetFile);

    goto    END;

FAIL:

    fprintf(stderr,"Failed to upload");

    return 1;

END:    

    printf("File \"%s\" has been uploaded",fileNameOnServer);

    return 0;

}

html文件命名为:upload.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"

   "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <title>Test Upload</title>

    <meta name="author" content="Jack">

    <!-- Date: 2007-08-30 -->

</head>

<body>

<form action="cgi-bin/upload.cgi" method="post" enctype="multipart/form-data" target="_blank">

    <input type="file" name="file" value="" />

    <input type="submit" name="submit" value="OK">

</form>

</body>

</html>

编译:gcc -Wall upload.c cgic.c -o upload.cgi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: