【发布时间】:2017-09-09 00:44:00
【问题描述】:
我在使用 PHP 获取文件上传进度时遇到问题,我的网站所在的服务器使用的是 php v5.6。
我还在我的 cpanel 管理器中启用了“上传进度”设置。
我尝试按照本教程进行操作: Tracking Upload Progress with PHP and JavaScript
但我将它与其他一些使用 ajax 请求处理文件上传的代码合并。
我的表单代码:
<form id="myForm">
<input type="hidden" value="myForm" name="<?php echo ini_get("session.upload_progress.name"); ?>">
<input type="file" id="file" />
<a href="javascript:uploadFile()">Upload</a>
</form>
Upload:
<div id="process">0%</div>
Javascript 代码: var timer;
function uploadFile() {
var uploadFile = $("#file")[0].files[0];
timer = setInterval(getStatus,1000);
$.ajax(
{
url : "upload.php",
type: 'POST',
data : new FormData($('form')[0]),
cache: false,
contentType: false,
processData: false,
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
// For handling the progress of the upload
myXhr.upload.addEventListener('progress',
function(e) {
if (e.lengthComputable) {
if (e.loaded < e.total) {
$('#process').html(((e.loaded / e.total) * 100).toFixed(1) + "%");
} else {
$('#process').html("Processing upload, please wait.");
}
}
} , false);
}
return myXhr;
},
success: function (response) {
$('#process').html(response);
clearTimeout(timer);
}
}
);
}
function getStatus() {
$.get("progress.php",
function(response) {
$("#process2").html(response);
}
);
}
上传.php
session_start();
$uploadedFile = $_FILES["file"];
move_uploaded_file($uploadedFile['tmp_name'],$uploadedFile["name"]);
echo $uploadedFile["name"]." was uploaded";
progress.php
session_start();
$key = ini_get("session.upload_progress.prefix") . "myForm";
if (!empty($_SESSION[$key])) {
$current = $_SESSION[$key]["bytes_processed"];
$total = $_SESSION[$key]["content_length"];
echo $current < $total ? ceil($current / $total * 100) : 100;
}
else {
echo 100;
}
不幸的是,在我的 JS 中: $('#process').html(((e.loaded / e.total) * 100).toFixed(1) + "%");
只获取获取请求所需的时间,而不是实际上传文件。
我希望我已经提供了足够的信息来获得帮助。
【问题讨论】:
标签: javascript php jquery ajax file-upload