【发布时间】:2019-10-14 15:10:04
【问题描述】:
我们有一个 Angular 6 应用程序,它过去使用流式传输从后端下载生成的大型文件,这意味着后端和客户端都没有将整个文件加载到内存中,因为这些文件可能有数百或数千 MB。我们使用了以下响应头:
Content-Disposition: attachment;filename=<generated filename>
Content-Type: text/csv; charset=utf-8
我们使用了window.open(exportLink, '_blank'),在使用基于 Cookie 的身份验证时效果很好。我们现在更改为基于标头的标记。现在,由于缺少标头,后端返回 403。
我了解,使用 windows.open 和 windows.location 等任何方法都不支持传递标头。
那么唯一的选择就是使用客户端 API(例如 Angular HTTP 客户端 + FileSaver)。然而,这不适用于大文件,因为它会达到浏览器的内存限制。
我们尝试了StreamSaver 和 Angular HTTP 客户端,但似乎无法正常工作。我们还尝试将浏览器 Fetch API 与流保护程序一起使用。
使用类似于 StreamSaver 存储库中提供的示例的后者似乎可以工作(意味着控制台输出表明文件保存成功),但我们在浏览器中看不到任何文件下载指示。
是否有人使用基于标头的令牌身份验证实现大文件流下载以及如何实现?
【问题讨论】:
标签: angular download stream header