gpt4 book ai didi

javascript - 如何使用 JavaScript 下载大文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:53 24 4
gpt4 key购买 nike

我需要使用 XMLHttpRequest 使用 JavaScript 下载一个大文件或 fetch无需先将文件保存在 RAM 内存中。

普通链接下载对我不起作用,因为我需要在请求 header 中发送 Bearer Token。

我可以设法下载一个文件,但这个“解决方案”是先将文件保存在 RAM 内存中,然后再出现保存对话框,这样如果文件大于可用 RAM,浏览器就会停止-内存。

这是我使用 fetch 的“解决方案”:

        var myHeaders = new Headers();
myHeaders.append('Authorization', `Bearer ${token}`);

var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };
var a = document.createElement('a');

fetch(url,myInit)
.then((response)=> {
return response.blob();
})
.then((myBlob)=> {
a.href = window.URL.createObjectURL(myBlob);
var attr = document.createAttribute("download");
a.setAttributeNode(attr);
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
});

这是我使用 XMLHttpRequest 的“解决方案”:

        var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = ()=>{
if (xhttp.readyState == 4){
if ((xhttp.status == 200) || (xhttp.status == 0)){
var a = document.createElement('a');
a.href = window.URL.createObjectURL(xhttp.response); // xhr.response is a blob
var attr = document.createAttribute("download");
a.setAttributeNode(attr);
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
}
}
};
xhttp.open("GET", url);
xhttp.responseType = "blob";
xhttp.setRequestHeader('Authorization', `Bearer ${token}`);
xhttp.send();

问题是我怎样才能下载比可用 RAM 内存大的文件并同时设置标题?

最佳答案

如在 StreamSaver.js(下面的链接)中所见,您可以使用流来解决此问题。

你可以试试StreamSaver.js (免责声明:我不是该 repo 协议(protocol)的所有者)。似乎在不跨浏览器兼容的情况下解决了您想要的问题。目前只有 Chrome +52 和 Opera +39 支持。

或者,有 FileSaver.js (免责声明:我不是那个 repo 的所有者)但你会遇到你目前遇到的同样问题。

关于javascript - 如何使用 JavaScript 下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com