2

ファイルのアップロードのキャンセルをサポートしようとしているときに問題が発生しています。アップロードがキャンセル可能かどうかを判断するためのベスト プラクティスを知りたいです。では、ファイルのアップロードが完了したときと、サーバーが応答を生成または返したときをどのように判断できるでしょうか? HTML5でファイルの進行状況を追跡することでこれが可能であることは理解していますが、IE9をサポートする必要があるため、アイデアが不足しています。

最終的な結果は、完全にアップロードされようとしているファイルのアップロードをキャンセルしようとして、中止要求を発行すると、最終的に応答を中止し、ファイルはサーバー上に喜んで置かれます。

jquery を使用してリクエストを送信し、abort() メソッドでキャンセルしています。ブラウザ コンソールに、リクエストが正常に中止されたことが表示されます。

些細なことを見逃していますか?

4

1 に答える 1

1

PHP には、アップロードの進行状況を追跡する機能が追加されました。「セッションのアップロードの進行状況」を参照してください。

この機能を使用して短いスクリプトを記述し、checkUpload.phpAJAX を使用してステータスを IE9 ページに戻します。

<?php
$_SESSION["upload_progress_123"] = array(
 "start_time" => 1234567890,   // The request time
 "content_length" => 57343257, // POST content length
 "bytes_processed" => 453489,  // Amount of bytes received and processed
 "done" => false,              // true when the POST handler has finished, successfully or not
 "files" => array(
  0 => array(
   "field_name" => "file1",       // Name of the <input/> field
   // The following 3 elements equals those in $_FILES
   "name" => "foo.avi",
   "tmp_name" => "/tmp/phpxxxxxx",
   "error" => 0,
   "done" => true,                // True when the POST handler has finished handling this file
   "start_time" => 1234567890,    // When this file has started to be processed
   "bytes_processed" => 57343250, // Number of bytes received and processed for this file
  ),
  // An other file, not finished uploading, in the same request
  1 => array(
   "field_name" => "file2",
   "name" => "bar.avi",
   "tmp_name" => NULL,
   "error" => 0,
   "done" => false,
   "start_time" => 1234567899,
   "bytes_processed" => 54554,
  ),
 )
);

PHP を使用して、アップロード プロセスをキャンセルすることも可能になりました。上記で参照した同じマニュアルページから、次のテキストが得られます。

$_SESSION[$key]["cancel_upload"] キーを TRUE に設定することで、現在進行中のファイルのアップロードをキャンセルすることもできます。同じリクエストで複数のファイルをアップロードする場合、現在進行中のファイルのアップロードと保留中のファイルのアップロードのみがキャンセルされますが、正常に完了したアップロードは削除されません。このようにアップロードがキャンセルされると、$_FILES 配列のエラー キーが UPLOAD_ERR_EXTENSION に設定されます。

PHP ドキュメントでカバーされていない唯一のことは、合計ファイル サイズを取得する方法です。このプロセスの非常に優れたレビューがここにあります: 「PHP マスター | アップロードの進行状況の追跡」

于 2013-05-06T20:15:11.387 に答える