Используя API файлов (https://www.html5rocks.com/tutorials/file/dndfiles/), мы можем свести к минимуму работу по загрузке большого файла. Этот метод состоит в том, чтобы нарезать загрузку на несколько кусков, создать XHR для каждой части и поместить файл вместе на сервер. Это похоже на то, как GMail загружает большие вложения так быстро. Такую технику можно также использовать, чтобы обойти ограничение на HTTP-запрос в Google App Engine на 32 МБ.
function upload(blobOrFile) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/server', true);
xhr.onload = function(e) { ... };
xhr.send(blobOrFile);
}
document.querySelector('input[type="file"]').addEventListener('change', function(e) {
var blob = this.files[0];
const BYTES_PER_CHUNK = 1024 * 1024; // 1MB chunk sizes.
const SIZE = blob.size;
var start = 0;
var end = BYTES_PER_CHUNK;
while(start < SIZE) {
upload(blob.slice(start, end));
start = end;
end = start + BYTES_PER_CHUNK;
}
}, false);
})();
Что не показано здесь, это код для восстановления файла на сервере.
P.S. Из таких функций, как http://underscorejs.org/#zip, также могут быть использованы.
Я проверил этот образец. благодаря – user3352698