我遇到了一个问题,我正在尝试支持取消文件上传。我想知道确定上传是否可取消的最佳做法。那么如何确定文件何时完成上传,而不是生成/返回响应的服务器?我理解这可以通过跟踪HTML5中的文件进度来实现,但由于我必须支持IE9,所以我的想法已经不多了。
最终结果是,如果您尝试取消接近完全上传的文件上传,并发出中止请求,您最终会中止响应,并且文件很高兴地坐在服务器上。
我正在使用jquery提交请求,并通过abort()方法取消。我在浏览器控制台中看到请求已成功中止。
我错过了一些微不足道的事情吗?
答案 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"