XMLHttpRequest upload.onprogress мгновенно завершен
Я пытаюсь сделать загрузчик файлов с HTML5 с индикатором прогресса. Вот мой код:
<!DOCTYPE html>
<html>
<head>
<title>Test Progress Meter</title>
<script type="text/javascript">
function submitFile(){
var blobOrFile = document.getElementById("fileInput").files[0];
var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
alert("finished!");
};
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
document.getElementById("statusBox").innerHTML = e.loaded + " / " + e.total;
}
};
xhr.open('POST', 'test.php', true);
xhr.send(blobOrFile);
};
</script>
</head>
<body>
<input type="file" id="fileInput" onchange="submitFile();" />
Status: <span id="statusBox"></span>
</body>
</html>
По сути, во всех моих браузерах, когда я выбираю файл для загрузки, событие прогресса срабатывает и сразу же показывает всю передачу как завершенную. Затем он остается там, пока файл действительно загружается, и в зависимости от файла, через несколько секунд / минут, скрипт предупреждает и показывает правильный ответ от сервера.
Я что-то упускаю из виду? Насколько я вижу, это происходит во всех моих браузерах (IE10, Chrome 28, FF22).
3 ответа
Это мой код, и он отлично работает для меня:
xhr.upload.onprogress = function(e){
var done = e.position || e.loaded, total = e.totalSize || e.total
var present = Math.floor(done/total*100)
document.getElementById('status').innerHTML = present + '%'
}
У меня была такая же проблема, как у вас, затем я попробовал свою страницу с другого компьютера, все просто прошло нормально, я использовал регулирование сети Chrome для имитации медленного интернет-соединения, но кажется, что все еще есть что-то отличное от реальной ситуации
Поскольку сервер или шлюз немедленно кэшируют данные запроса, запишите данные файла на диск или в память. На данный момент прогресс файла данных действительно составляет 100%. Но логический код сервера еще не завершил обработку данных файла, которые только что были кэшированы на сервере.