Javascript 使用fetch下载大文件,但使用太多缓存
tl;dr:有没有办法优化此功能以更好地处理超大文件的下载 我正在使用javascript构建这个简单的web应用程序,用户可以在其中下载多种类型的文件。通常这些文件是.cpio存档、.mov或包含xyz其他文件的简单文件夹 我使用的下载文件的api(Synology)准确地反映了它在头文件中返回的内容(application/zip、mov、zip等),因此每种类型的文件都处理得很好,甚至文件夹也会自动压缩为zip 我的问题是,有时这些文件的重量会超过1GB,而现在发生的事情是,在下载之前,所有文件都首先加载到RAM中。对于非常大的文件(>2-3 GB),这将成为一个真正的系统猪 我需要找到一种绕过缓存的方法,现在,我在请求头中包含的所有内容都没有任何帮助 下面是我的donwnload函数:Javascript 使用fetch下载大文件,但使用太多缓存,javascript,api,download,blob,fetch,Javascript,Api,Download,Blob,Fetch,tl;dr:有没有办法优化此功能以更好地处理超大文件的下载 我正在使用javascript构建这个简单的web应用程序,用户可以在其中下载多种类型的文件。通常这些文件是.cpio存档、.mov或包含xyz其他文件的简单文件夹 我使用的下载文件的api(Synology)准确地反映了它在头文件中返回的内容(application/zip、mov、zip等),因此每种类型的文件都处理得很好,甚至文件夹也会自动压缩为zip 我的问题是,有时这些文件的重量会超过1GB,而现在发生的事情是,在下载之前,所
fetch(downloadURL, {
method: "GET",
mode: "cors",
cache: 'no-store',
headers: {
'pragma': 'no-cache',
'cache-control': 'no-store'
},
})
.then(response => {
return response.blob();
})
.then(blob => {
console.log(blob);
var url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
.catch(error => {
console.log(error)
});
以下是API在响应头中返回的内容:
Accept-Ranges: none
Connexion: Keep-alive
Content-Type: application/zip
Date: Mon, 21 Oct 2019 09:00:00 GMT
Keep-Alive: timeout=5, max=100
Server: ngix
Transfer-Encoding: chunked
以下是解决我问题的方法。最后,我觉得我太专注于使用fetch了。 我意识到我可以使用API查询url启动下载,使用与Google Chrome兼容的下载属性
var link = document.createElement("a");
link.download = name;
link.href = uri;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
delete link;
更简单,无需缓存