YawsWebサーバーに進行状況をアップロードします

ドロップ

Yaws 2.0でスクリプトupload2.yawsテストしていますが、機能していません。スクリプトはYaws1.57用に開発されました。

Yawsからのログは次のとおりです。

POST /html/upload2.yaws HTTP/1.1
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Host: 192.168.26.10
Referer: http://192.168.26.10/html/upload2.yaws
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36
Cookie: gsScrollPos=0; gsScrollPos=0
Content-Length: 1587
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5zKIyUtdiK82R4de
Accept-Language: pt,en-US;q=0.8,en;q=0.6,pt-BR;q=0.4
Accept-Encoding: gzip, deflate
Https: 1
Origin: http://192.168.26.10
Cache-Control: max-age=0


upload.yaws:multipart/3 State=filename=undefined rlist=undefined data=undefined
upload.yaws:multipart/3 result
upload.yaws:process_part/4d State=filename=undefined rlist=undefined data=undefined
upload.yaws:multipart/3 done
upload.yaws:result_ehtml/3 error Reason=Error: filename not found in header.
Worker: <0.78.0> 
[2015-07-24 13:50:54.795] ===== SRV -> CLI =====
HTTP/1.1 200 OK
Server: Yaws 2.0
Date: Fri, 24 Jul 2015 13:50:54 GMT
Content-Length: 532
Content-Type: text/html

フォームアクションをnetcatでリッスンポートに変更すると、ファイル名が付いた完全なヘッダーが受信されます。

コード:

show_form(A, Feedback) -> {ehtml,
        [       {form
                ,[{enctype,"multipart/form-data"},{action,"http://192.168.26.10:8800"},{method,"post"}]
                ,       [{p,[],"Choose a file and click Upload."}
                        ,{p,[],{input,[{type,"file"},{name,"file"}],[]}}
                        ,{p,[],{input,[{type,"submit"},{value,"Upload"}],[]}}
                        ]
                }
        ,{p,[],Feedback}
        ]}.

私はNCを始めました

$ sudo nc -l 8800

次に、次のヘッダーが表示されます。

POST / HTTP/1.1
Host: 192.168.26.10:8800
Connection: keep-alive
Content-Length: 1587
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://192.168.26.10
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36
HTTPS: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary9iHQOXBtRE9CyRAZ
Referer: http://192.168.26.10/html/upload2.yaws
Accept-Encoding: gzip, deflate
Accept-Language: pt,en-US;q=0.8,en;q=0.6,pt-BR;q=0.4
Cookie: gsScrollPos=0

------WebKitFormBoundary9iHQOXBtRE9CyRAZ
Content-Disposition: form-data; name="file"; filename="signing_debian_packages.txt"
Content-Type: text/plain

エラーはマルチパート関数にあると思われますが、Erlangでは初心者です:/


    %%% Process part of a multi-part form post
    %%% returns Ehtml | {get_more, Continuation, NewState}
    multipart(A, State) when is_record(State,upload) ->
            io:fwrite("upload.yaws:multipart/3 State=~s~n", [upload_to_string(State)]),
            case yaws_api:parse_multipart_post(A) of
            {cont, Cont, Part} ->
                    io:fwrite("upload.yaws:multipart/3 cont~n"),
                    case process_part(A, Part, State) of
                    {done, Result} ->
                            io:fwrite("upload.yaws:multipart/3 done~n"),
                            result_ehtml(A, Result);
                    {cont, NewState} ->
                            io:fwrite("upload.yaws:multipart/3 get_more NewState=~s~n", [upload_to_string(NewState)]),
                            {get_more, Cont, NewState}
                    end;
            {result, Part} ->
                    io:fwrite("upload.yaws:multipart/3 result~n"),
                    case process_part(A, Part, State#upload{last=true}) of
                    {done, Result} ->
                            io:fwrite("upload.yaws:multipart/3 done~n"),
                            result_ehtml(A, Result);
                    {cont, _} ->
                            io:fwrite("upload.yaws:multipart/3 error~n"),
                            result_ehtml(A, {error, "Error During Upload"})
                    end;
            [] -> result_ehtml(A, {error,"You must select a file to upload."})
            end.

誰かがアイデアを持っていますか?

スティーブビノスキ

問題はprocess_part、ヘッダーを処理する関数句にあります。

%%% Process header
process_part(A, [{head, {"file", Opts}}|Tail], State ) ->
        io:fwrite("upload.yaws:process_part/4d State=~s~n", [upload_to_string(State)]),
        case lists:keysearch(filename, 1, Opts) of
        {value, {_, UncheckedFileName}} ->
                io:fwrite("upload.yaws:process_part/4d UncheckedFileName=~s~n", [UncheckedFileName]),
                FileName = sanitize_filename(UncheckedFileName),
                io:fwrite("upload.yaws:process_part/4d FileName=~s~n", [FileName]),
                process_part(A, Tail, State#upload{filename=FileName,rlist=[]});
        false ->
                {done, {error, "Error: filename not found in header."}}
        end;

toの呼び出しの最初の引数lists:keysearch/3はアトムfilenameですが、"filename"代わりに文字列である必要があります改訂された機能は次のとおりです。

%%% Process header
process_part(A, [{head, {"file", Opts}}|Tail], State ) ->
        io:fwrite("upload.yaws:process_part/4d State=~s~n", [upload_to_string(State)]),
        case lists:keysearch("filename", 1, Opts) of
        {value, {_, UncheckedFileName}} ->
                io:fwrite("upload.yaws:process_part/4d UncheckedFileName=~s~n", [UncheckedFileName]),
                FileName = sanitize_filename(UncheckedFileName),
                io:fwrite("upload.yaws:process_part/4d FileName=~s~n", [FileName]),
                process_part(A, Tail, State#upload{filename=FileName,rlist=[]});
        false ->
                {done, {error, "Error: filename not found in header."}}
        end;

この変更により、upload2.yawsYaws2.0とErlang18.0で問題なく動作します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

進行状況バーを Catalyst アプリにアップロードする

分類Dev

Android:HttpURLConnectionの進行状況コールバックを使用してCloudinaryに写真をアップロードする

分類Dev

並列アップロードの進行状況のためにWindowsフォームで動的進行状況バーを生成する方法

分類Dev

フェッチの進行状況インジケーターをアップロードしますか?

分類Dev

Androidでレイアウトをリロードし、サークルの進行状況バーをプログラムで更新します

分類Dev

JavascriptでFetchAPIを使用してファイルをアップロードし、進行状況を表示します

分類Dev

アプリをロードする前にWebアプリの進行状況インジケーターをフラッターしますか?

分類Dev

SSH.NETを使用してProgressBarにファイルアップロードの進行状況を表示する

分類Dev

更新パネルにファイルアップロードを使用して進行状況の更新を表示する

分類Dev

ファイルのアップロードの進行状況の最後にfancyboxを閉じます

分類Dev

AsyncTaskを使用してバックグラウンドサービス内にAndroidの進行状況ダイアログを追加し、致命的な例外を取得する

分類Dev

GWT:進行状況バーを表示するためのファイルアップロード速度を取得します

分類Dev

ブートストラッププログレスバーを使用して、アップロードの進行状況をモーダルで表示する

分類Dev

PUTは、ストリームと進行状況を含むファイルのバイト範囲をアップロードします

分類Dev

プレーンなRubyスクリプトの進行状況をS3にアップロードします

分類Dev

Javaを使用したファイルのアップロード(進行状況バーあり)

分類Dev

Pythonを使用してGoogleドライブスクリプトにアップロードの進行状況を追加します

分類Dev

Angular 7-データと一緒に複数のファイルをアップロードし、進行状況を報告します

分類Dev

Apache HttpClient 4でファイルアップロードの進行状況バーを取得する方法

分類Dev

Angularファクトリ:アップロード中の進行状況に応じてスコープを更新します

分類Dev

gsutil cpを使用してPowerShellスクリプトをGCPに実行すると、アップロードの進行状況が複数行に表示されます

分類Dev

Swift3とAmazonSDKを使用してAmazonS3に画像をアップロードするためのアップロードの進行状況を表示する

分類Dev

プログレッシブバーは進行状況を表示しません

分類Dev

プログレスバーにファイルのアップロードの進行状況を表示する方法-AmazonS3バケット

分類Dev

Cloudinary UnsignedUploadのアップロードの進行状況を取得する

分類Dev

Cloudinary UnsignedUploadのアップロードの進行状況を取得する

分類Dev

Android用DavidWebbでアップロードの進行状況を取得する

分類Dev

Android用DavidWebbでアップロードの進行状況を取得する

分類Dev

AFNetworkingを使用して、Strava V3APIへのアップロードの進行状況と非同期にファイルをPOSTします

Related 関連記事

  1. 1

    進行状況バーを Catalyst アプリにアップロードする

  2. 2

    Android:HttpURLConnectionの進行状況コールバックを使用してCloudinaryに写真をアップロードする

  3. 3

    並列アップロードの進行状況のためにWindowsフォームで動的進行状況バーを生成する方法

  4. 4

    フェッチの進行状況インジケーターをアップロードしますか?

  5. 5

    Androidでレイアウトをリロードし、サークルの進行状況バーをプログラムで更新します

  6. 6

    JavascriptでFetchAPIを使用してファイルをアップロードし、進行状況を表示します

  7. 7

    アプリをロードする前にWebアプリの進行状況インジケーターをフラッターしますか?

  8. 8

    SSH.NETを使用してProgressBarにファイルアップロードの進行状況を表示する

  9. 9

    更新パネルにファイルアップロードを使用して進行状況の更新を表示する

  10. 10

    ファイルのアップロードの進行状況の最後にfancyboxを閉じます

  11. 11

    AsyncTaskを使用してバックグラウンドサービス内にAndroidの進行状況ダイアログを追加し、致命的な例外を取得する

  12. 12

    GWT:進行状況バーを表示するためのファイルアップロード速度を取得します

  13. 13

    ブートストラッププログレスバーを使用して、アップロードの進行状況をモーダルで表示する

  14. 14

    PUTは、ストリームと進行状況を含むファイルのバイト範囲をアップロードします

  15. 15

    プレーンなRubyスクリプトの進行状況をS3にアップロードします

  16. 16

    Javaを使用したファイルのアップロード(進行状況バーあり)

  17. 17

    Pythonを使用してGoogleドライブスクリプトにアップロードの進行状況を追加します

  18. 18

    Angular 7-データと一緒に複数のファイルをアップロードし、進行状況を報告します

  19. 19

    Apache HttpClient 4でファイルアップロードの進行状況バーを取得する方法

  20. 20

    Angularファクトリ:アップロード中の進行状況に応じてスコープを更新します

  21. 21

    gsutil cpを使用してPowerShellスクリプトをGCPに実行すると、アップロードの進行状況が複数行に表示されます

  22. 22

    Swift3とAmazonSDKを使用してAmazonS3に画像をアップロードするためのアップロードの進行状況を表示する

  23. 23

    プログレッシブバーは進行状況を表示しません

  24. 24

    プログレスバーにファイルのアップロードの進行状況を表示する方法-AmazonS3バケット

  25. 25

    Cloudinary UnsignedUploadのアップロードの進行状況を取得する

  26. 26

    Cloudinary UnsignedUploadのアップロードの進行状況を取得する

  27. 27

    Android用DavidWebbでアップロードの進行状況を取得する

  28. 28

    Android用DavidWebbでアップロードの進行状況を取得する

  29. 29

    AFNetworkingを使用して、Strava V3APIへのアップロードの進行状況と非同期にファイルをPOSTします

ホットタグ

アーカイブ