【发布时间】:2021-08-18 22:44:55
【问题描述】:
我正在尝试使用 Angular 组件中的 StreamSaver.js 将大型数据文件从服务器直接下载到文件系统。但是在 ~2GB 之后会发生错误。似乎数据首先流式传输到浏览器内存中的 blob 中。并且可能存在 2GB 的限制。我的代码基本上取自 StreamSaver 示例。知道我做错了什么以及为什么文件没有直接保存在文件系统上吗?
服务:
public transferData(url: string): Observable<Blob> {
return this.http.get(url, { responseType: 'blob' });
}
组件:
download(url: string) {
this.extractionService.transferData(url)
.subscribe(blob => {
const fileStream = streamSaver.createWriteStream('data.tel', {
size: blob.size
});
const readableStream = blob.stream();
if (window.WritableStream && readableStream.pipeTo) {
return readableStream
.pipeTo(fileStream)
.then(() => console.log("done writing"));
}
const writer = fileStream.getWriter();
const reader = readableStream.getReader();
const pump = () =>
reader.read()
.then(res => res.done ? writer.close() : writer.write(res.value).then(pump));
pump();
});
}
请求文件的头部:
"内容类型:应用程序/八位字节流\r\n"
"Content-Disposition: attachment; filename=data.tel\r\n"
【问题讨论】:
标签: javascript angular angular-httpclient