gpt4 book ai didi

Angular 不会从流中下载文件 ( StreamingResponseBody )

转载 作者:太空狗 更新时间:2023-10-29 18:28:33 25 4
gpt4 key购买 nike

我正在使用angular来下载大文件,对于后端我正在使用spring boot,这是端点的代码:

@RequestMapping(value = "/download", method = RequestMethod.GET)
public StreamingResponseBody download(@PathVariable String path) throws IOException {

final InputStream file =azureDataLakeStoreService.readFile(path);
return (os) -> {
readAndWrite(file , os);
};
}

private void readAndWrite(final InputStream is, OutputStream os)
throws IOException {
byte[] data = new byte[2048];
int read = 0;
while ((read = is.read(data)) >= 0) {
System.out.println("appending to file");
os.write(data, 0, read);
}
os.flush();
}

当我尝试使用 curl 获取文件时它起作用了,我可以看到正在下载的文件并且它的大小在增加:

curl -H "Authorization: Bearer <MyToken>" http://localhost:9001/rest/api/analyses/download --output test.zip

但是,当我尝试使用 Angular 下载文件时,即使请求成功,它也不起作用,我可以在日志中看到文本“附加到文件”多次显示,但没有下载任何内容浏览器,这是我的代码:

this.http.get(url, { headers: headers, responseType: 'blob', observe: 'response' })
.subscribe(response => {
const contentDispositionHeader: string = response.headers.get('Content-Disposition');
const parts: string[] = contentDispositionHeader.split(';');
const filename = parts[1].split('=')[1];
const blob = new Blob([response.body], {
type: 'application/zip'
});
saveAs(blob, filename);
});

saveAs() 属于 file-saver , 顺便说一句,当我尝试将文件下载为 byte[] (没有流式传输)时,上面的代码有效。

我在网上能找到的就是这个code当我使用 angular 5 时它使用 angularJs,任何人都可以指出问题所在!谢谢。

更新:

我可以在 Google chrome 的网络选项卡中看到文件正在下载,但我不知道文件保存在哪里。

enter image description here

最佳答案

我试过使用你的后端代码,但在 Angular 上我使用了这个:

window.location.href = "http://localhost:9001/rest/api/analyses/download";

开始下载成功

关于Angular 不会从流中下载文件 ( StreamingResponseBody ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366704/

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