我使用fileStreamResult实现下载大文件,它返回一个流到前端,并使用streamSaver接收流并写入前端的loacl文件。但是当我暂停下载时,谷歌浏览器内存使用量激增然后崩溃。我该如何修复它,提前谢谢。
//我在下载文件时使用这些代码,前端使用streamSaver(github中的StreamSaver.js)接收流,当我暂停下载时,浏览器内存爆炸,任何人都可以帮助我,非常感谢! 后端:
public async Task<IActionResult> Download() {
var path = "D:\\backend-fileupload\\test.rar";
var newstream = System.IO.File.OpenRead(path);
var size = newstream.Length;
HttpContext.Response.Headers.Add("Content-Length",size.ToString());
return new FileStreamResult(newstream, "application/octet-
stream");
}
前端:
const name = "test.rar"
const fileStream = streamSaver.createWriteStream(name, {
size: Number(res.headers.get("Content-Length")) })
const readableStream = res.body;
if (window.WritableStream && readableStream?.pipeTo) {
return readableStream.pipeTo(fileStream).then(() => {
console.log('done writing...')
})
}
const writer = fileStream.getWriter();
const reader = readableStream?.getReader();
const pump: any = () =>
reader?.read()
.then(res => res.done ? writer.close() :
writer.write(res.value).then(pump));
pump();