2

我在尝试支持取消文件上传时遇到问题。我想知道确定上传是否可取消的最佳做法。那么如何确定文件何时完成上传,而不是服务器生成/返回响应?我知道这可以通过跟踪 HTML5 中的文件进度来实现,但是由于我必须支持 IE9,所以我的想法已经不多了。

最终结果是,如果您尝试取消即将完全上传的文件上传,并发出中止请求,您最终会中止响应并且文件愉快地位于服务器上。

我正在使用 jquery 提交请求,并通过 abort() 方法取消。我在浏览器控制台中看到请求已成功中止。

我错过了一些微不足道的事情吗?

4

1 回答 1

1

PHP 现在可以跟踪上传进度。请参阅“会话上传进度”

使用此功能编写一个简短的脚本:checkUpload.php,并使用 AJAX 将状态返回到您的 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 Master | Tracking Upload Progress”

于 2013-05-06T20:15:11.387 回答