goahead文件上传

1.goahead文件上传需要修改与添加的源码
  • 在goahead.c文件中添加一个并注册一个接受并客户端(浏览器)文件的action,代码示例:
static void uploadFileAction(Webs *wp)
{
    WebsKey         *s;
    WebsUpload      *up;
    char            *upfile;
    websSetStatus(wp, 200);
    websWriteHeaders(wp, -1, 0);
    websWriteHeader(wp, "Content-Type", "text/plain");
    websWriteEndHeaders(wp);
    /***
    *保存上传的文件并打印上传文件的具体信息
    /
    if (scaselessmatch(wp->method, "POST")) {
        for (s = hashFirst(wp->files); s; s = hashNext(wp->files, s)) {
            up = s->content.value.symbol;
            websWrite(wp, "FILE: %s\r\n", s->name.value.string);
            websWrite(wp, "FILENAME=%s\r\n", up->filename);
            websWrite(wp, "CLIENT=%s\r\n", up->clientFilename);
            websWrite(wp, "TYPE=%s\r\n", up->contentType);
            websWrite(wp, "SIZE=%d\r\n", up->size);
            upfile = sfmt("%s/tmp/%s", websGetDocuments(), up->clientFilename);//文件存放的地方
            if(access(up->filename, 0) !=0)
            {
                   error("uploadTest() %s DOESN'T EXISIT!",up->filename);
            }
            if(access(upfile, 0) !=0)
            {
                   error("uploadTest() %s DOESN'T EXISIT!",upfile);
            }
           if (rename(up->filename, upfile) < 0)
            {
                error("Cannot rename uploaded file: %s to %s, errno %d", up->filename, upfile, errno);
            }
            wfree(upfile);
        }
        websWrite(wp, "\r\nVARS:\r\n");
        for (s = hashFirst(wp->vars); s; s = hashNext(wp->vars, s)) 
        {
            websWrite(wp, "%s=%s\r\n", s->name.value.string, s->content.value.string);
        }
    }
    websDone(wp);
}
  • 如果是在windows执行goahead服务器,那就修改Goahead-windows-default-me.h或Goahead-windows-static-me.h文件,如果是在linux系统下执行goahead服务器就修该Goahead-linux-default-me.h或Goahead-linux-static-me.h。修改如下:

修改宏ME_GOAHEAD_UPLOAD_DIR,这个宏是用来处理文件上传时,设置的一个暂存的文件夹,修改成设置的暂存文件的目录,例如 修改为:#define ME_GOAHEAD_UPLOAD_DIR “D:/test”

  • 修改http.c文件
    删除或注释掉static void parseHeader(Webs *wp)函数中的如下代码(为了存放大于2M的文件):
   if (wp->rxLen > ME_GOAHEAD_LIMIT_POST) {
                    websError(wp, HTTP_CODE_REQUEST_TOO_LARGE | WEBS_CLOSE, "Too big");
                    return;
               }
2.前台代码示例
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form action="/action/uploadTest" method ="post" enctype="multipart/form-data">
            <input type="file" name="files[]" multiple/>

            <input type="submit" value="提交">
        </form>
    </body>
</html>

3.结果

结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值