Download 使用流下载带有身份验证令牌的大文件

Download 使用流下载带有身份验证令牌的大文件,download,stream,cross-browser,polyfills,Download,Stream,Cross Browser,Polyfills,我正在尝试使用获取下载文件,因为它的头需要身份验证。问题是,当文件太大时,用户必须等待很长时间才能从浏览器获得任何反馈,直到它说该文件已实际下载,因此我尝试streamsaver,以便在下载时在浏览器中显示“下载”菜单 虽然它可以在Chrome上运行,但我现在面临的问题是Firefox似乎不支持StreamAPI,所以我尝试使用polyfill,但它似乎不起作用 从'streamsaver'导入{createWriteStream,受支持的}; 从“web streams polyfill/p

我正在尝试使用
获取
下载文件,因为它的头需要身份验证。问题是,当文件太大时,用户必须等待很长时间才能从浏览器获得任何反馈,直到它说该文件已实际下载,因此我尝试streamsaver,以便在下载时在浏览器中显示“下载”菜单

虽然它可以在Chrome上运行,但我现在面临的问题是Firefox似乎不支持StreamAPI,所以我尝试使用polyfill,但它似乎不起作用

从'streamsaver'导入{createWriteStream,受支持的};
从“web streams polyfill/ponyfill/es6”导入{WritableStream};
const downloadWithToken=async(url,名称)=>{
const token=localStorage.getItem('token');
const authorization=‘承载人’+令牌;
const headers=新的头({authorization});
const options={headers};
let response=等待获取(url、选项)
如果(!受支持){
window.writeablestream=writeablestream;
}
const filestream=createWriteStream(名称);
const writer=filestream.getWriter();
if(response.body.pipeTo){
writer.releaseLock();
返回response.body.pipeTo(filestream);
}
const reader=response.body.getReader();
常量泵=()=>
读者
.读()
.then(({value,done})=>(done?writer.close():writer.write(value.then(pump)));
泵();
};
我做错了什么?

我也有同样的问题()。我就是这样解决的:

从“web streams polyfill/ponyfill”导入{WritableStream};
从“streamSaver”导入streamSaver;
//如果WritableStream不可用(Firefox、Safari),请从ponyfill获取它
如果(!window.writeablestream){
streamSaver.WritableStream=WritableStream;
}
const fileStream=streamSaver.createWriteStream(文件名);
//其余部分大致保持不变,这取决于用例。有关本节的更多详细信息,请参阅此示例:
// https://jimmywarting.github.io/StreamSaver.js/examples/fetch.html
其目的是检查当前浏览器中是否有可用的
window.writeablestream
。如果没有,请将
writeablestream
from
ponyfill
直接分配给
streamSaver.writeablestream
属性

在Google Chrome 78、Firefox 70、Safari 13上测试,我也有同样的问题()。我就是这样解决的:

从“web streams polyfill/ponyfill”导入{WritableStream};
从“streamSaver”导入streamSaver;
//如果WritableStream不可用(Firefox、Safari),请从ponyfill获取它
如果(!window.writeablestream){
streamSaver.WritableStream=WritableStream;
}
const fileStream=streamSaver.createWriteStream(文件名);
//其余部分大致保持不变,这取决于用例。有关本节的更多详细信息,请参阅此示例:
// https://jimmywarting.github.io/StreamSaver.js/examples/fetch.html
其目的是检查当前浏览器中是否有可用的
window.writeablestream
。如果没有,请将
writeablestream
from
ponyfill
直接分配给
streamSaver.writeablestream
属性

在Google Chrome 78、Firefox 70、Safari 13上测试,及