7

私はBlueimp の jQuery Uploader (非常に優れています) と S3 ハンドラーを使用してファイルをアップロードし、S3 API 経由で (PHP SDK から) S3 に転送しています。

できます。問題は、大きなファイル (>1GB) の場合、(create-object を介して) S3 に転送するのに数分かかることです。これを行う PHP ファイルは、このプロセスが完了するまでハングアップします。問題は、( jQuery Ajax メソッドを使用する) アップローダーが待機をあきらめて、毎回再起動するように見えることです。

これは PHP INI 'max_input_time' などに関連していると考えていましたが、現在は変化しているように見えますが、約 60 秒待機しているように見えました。PHP INI およびその他の関連で max_input_time を増やしましたが、それ以上はありません。

また、スクリプトまたは jQuery メソッドのいずれかで、JS にタイムアウトがあることも考慮しました (より可能性が高い)。開発者 (blueimp) は、フロントエンド スクリプトにそのようなタイムアウトはないと述べています。また、私も見たことがありません。「タイムアウト」は jQuery Ajax メソッド オプションで参照されていますが、待機時間ではなく、アップロード時間全体に影響しているようです。応答のために-それはあまり役に立ちません。

感謝して受け取った助けや指導。

4

2 に答える 2

1

http://api.jquery.com/jQuery.ajax/の jQuery ドキュメントには次のように書かれ ています。

タイムアウト

リクエストのタイムアウト (ミリ秒単位) を設定します。これは、$.ajaxSetup() で設定されたグローバル タイムアウトをオーバーライドします。タイムアウト期間は、$.ajax 呼び出しが行われた時点から始まります。他のいくつかのリクエストが進行中で、ブラウザに利用可能な接続がない場合、リクエストが送信される前にタイムアウトになる可能性があります。jQuery 1.4.x 以下では、リクエストがタイムアウトした場合、XMLHttpRequest オブジェクトは無効な状態になります。オブジェクト メンバーにアクセスすると、例外がスローされる場合があります。Firefox 3.0+ のみで、スクリプトと JSONP リクエストはタイムアウトでキャンセルできません。スクリプトは、タイムアウト期間後に到着した場合でも実行されます。

これに加えて、php の set_time_limit 関数と php の最大メモリ設定を確認することもお勧めします。

とにかく、エラーコールバックを実装するのが最善の方法のようです

$.ajax('yourScript.php',{
 error:function(jqXHR){  echo this error ... }
});

jQueryのドキュメントには次のように書かれています:

リクエストが失敗した場合、エラー コールバックは登録された順序で呼び出されます。これらは、jqXHR、エラーの種類を示す文字列、および該当する場合は例外オブジェクトを受け取ります。一部の組み込みエラーは、例外オブジェクトとして文字列を提供します: "abort"、"timeout"、"No Transport"。

これにより、誰 (サーバーまたはクライアント) が送信を停止したかについてのヒントが得られる場合があります。

お役に立てれば

于 2012-11-29T17:02:19.737 に答える
1

大きなファイルを一度にアップロードすると、さまざまな問題が発生する可能性があります。最善の方法は、クライアント側でファイルをチャンクに分割してから、一度に 1 チャンクずつサーバーに送信し、サーバーがチャンクを元のファイルに再構築してから S3 にプッシュすることです。

window.FileReaderあなたが使用でき、ファイルでFile.prototype.slicejavascriptを使用してそれを切り取ることができる限り。.split()

于 2012-11-29T17:03:47.400 に答える