我有一个XHR对象,可以下载1GB的文件。
function getFile(callback)
{
var xhr = new XMLHttpRequest();
xhr.onload = function () {
if (xhr.status == 200) {
callback.apply(xhr);
}else{
console.log("Request error: " + xhr.statusText);
}
};
xhr.open('GET', 'download', true);
xhr.onprogress = updateProgress;
xhr.responseType = "arraybuffer";
xhr.send();
}
但是,即使使用 worker,File API 也无法将所有内容加载到内存中,否则会出现内存不足的情况...
btn.addEventListener('click', function() {
getFile(function() {
var worker = new Worker("js/saving.worker.js");
worker.onmessage = function(e) {
saveAs(e.data); // FileSaver.js it creates URL from blob... but its too large
};
worker.postMessage(this.response);
});
});
Web Worker
onmessage = function (e) {
var view = new DataView(e.data, 0);
var file = new File([view], 'file.zip', {type: "application/zip"});
postMessage('file');
};
我不打算压缩文件,这个文件已经从服务器压缩过了。
我原本想将它存储在indexedDB中,但是无论如何我都需要加载blob或文件,即使我通过范围字节请求,迟早我也会构建这个巨大的blob...
我想创建blob:URL并在浏览器下载后将其发送给用户
我将使用Google Chrome的FileSystem API,但我希望能为Firefox设计一个类似的东西,我研究了File Handle Api但是没有找到...
我必须为Firefox构建扩展程序,才能像FileSystem针对Google Chrome那样做吗?
Ubuntu 32位
btn
的'click'
事件中执行它们,你会得到多少个警报。 - user5066707