我正在尝试使用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();
});
}
所请求文件的头部:
"Content-Type: application/octet-stream\r\n"
"Content-Disposition: attachment; filename=data.tel\r\n"