中止上传请求

时间:2012-12-11 03:33:16

标签: php jquery ajax html5

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

最终结果是,如果您尝试取消接近完全上传的文件上传,并发出中止请求,您最终会中止响应,并且文件很高兴地坐在服务器上。

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

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

1 个答案:

答案 0 :(得分:0)

PHP现在可以跟踪上传进度。请参阅"Session Upload Progress"

使用此功能编写一个简短脚本: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"