Разное поведение браузеров при загрузке файлов через XMLHttpRequest. Как избежать моментальной псевдо 100% загрузки файла?

Проблема в основном касается только Firefox (54.0.1) и заключается оно в том, что при биндинге на "progress" объекта XHR, event.loaded сразу же равен event.total и поэтому прогресс бар получается 100% но загрузка файла всё ещё идет (например, если медленное соединение или сервер затупил) . Методом тыка выяснил, что такое происходит если размер файла меньше 556397 байт. Для справки, Chrome начинает так же себя вести с файлами меньше 100 кб. IE 11 всегда сначала отправляет кусочек чуть меньше 1 кб и потом сразу начинает пулят по ~300 кб.

Как добиться плавной загрузки файла? Тот же vk.com плавно те же самые файлы загружает.
  • Вопрос задан
  • 1219 просмотров
Пригласить эксперта
Ответы на вопрос 1
lazalu68
@lazalu68
Salmon
Илья Кантор советует использовать xhr.upload для этого:

xhr.upload.onprogress = function(event) {
  alert( 'Загружено на сервер ' + event.loaded + ' байт из ' + event.total );
}

xhr.upload.onload = function() {
  alert( 'Данные полностью загружены на сервер!' );
}

xhr.upload.onerror = function() {
  alert( 'Произошла ошибка при загрузке данных на сервер!' );
}


А если вы пользуетесь xhr.onprogress, то вы банально не в ту сторону смотрите, xhr.onprogress следит за скачиванием.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы