goaheadファイルアップロード

6748 ワード

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
    "
    , s->name.value.string); websWrite(wp, "FILENAME=%s\r
    "
    , up->filename); websWrite(wp, "CLIENT=%s\r
    "
    , up->clientFilename); websWrite(wp, "TYPE=%s\r
    "
    , up->contentType); websWrite(wp, "SIZE=%d\r
    "
    , 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
    VARS:\r
    "
    ); for (s = hashFirst(wp->vars); s; s = hashNext(wp->vars, s)) { websWrite(wp, "%s=%s\r
    "
    , 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)関数の次のコード(2 Mより大きいファイルを格納するため):
  •    if (wp->rxLen > ME_GOAHEAD_LIMIT_POST) {
                        websError(wp, HTTP_CODE_REQUEST_TOO_LARGE | WEBS_CLOSE, "Too big");
                        return;
                   }

    2.フロントコード例
    
    <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.結果