2

非常に奇妙な問題に遭遇し、方向性を探しています。

コンテキスト: WordPress で大きなファイル (最大 100MB) をアップロードする。プロセスの一部として、サーバー側で実行される長いタスク (チャンキングを使用して API を介してファイルを DropBox にプッシュする) も実行されるため、大きなファイルでは必然的に応答が遅くなります。sleep()この部分は、PHPの関数を実行することで簡単にシミュレートできます。

問題: Fineuploader が 100% に達し、waitingForResponseメッセージが約 15 秒間表示され (この時点ではサーバーはまだ処理を完了していません)、アップロードを最初からやり直します。2 回目の試行の後、サーバーから何も受信していないと主張し、アップロードが失敗したと表示されます。コンソール デバッグ メッセージ:

[FineUploader] xhr - server response received for 0
XMLHttpRequest { readyState=4, timeout=0, withCredentials=false, more...}
[FineUploader] responseText = 

サーバー ログには2 つの要求が表示され、サーバーは成功した JSON を 2 回エコーします。最終的に、サーバーには 2 つのファイルがあります。

質問:これを解決するにはどうすればよいですか? タイムアウトが発生しないように、FineUploader に定期的に何かを返すことはできますか?

4

1 に答える 1

2

Fine Uploader にはタイムアウト メカニズムがありません。タイムアウトが発生している場合は、ブラウザ自体がタイムアウトを強制しているか、ブラウザとサーバーの間にタイムアウトしているアプライアンスがあります。

AWS(アマゾン ウェブ サービス)を利用する際に、過去にこの問題に遭遇しました。あなたの状況と同様に、ファイル全体が受信された後、応答を返す前にサーバー側で処理を実行する必要がありました。もちろん、この処理中に TCP トラフィックは発生していません。ELB (Elastic Load Balancer) の TCP アイドル タイムアウトが 1 分であることが判明しました。大きなファイルの処理がこの値を超えたため、ELB がリクエストを終了させました。

リクエスト/アップロードが完了した場合にのみ、Fine Uploader にレスポンスを返すことができます。サーバー側の処理が完了するまで、Fine Uploader に「成功」​​の応答を返すのを本当に待ちたい場合は、何が要求を終了させて​​いるのかを突き止める必要があります。あなたのオプションは、リクエストを終了しているデバイスのタイムアウト期間を増やすか、単に処理を別のスレッド サーバー側に委譲し、すべてのファイル バイトが受信されて受信されるとすぐに成功応答を返す可能性があります。注文。

于 2013-05-19T03:29:30.510 に答える