3

我有一个管理员控制面板,其中管理员用户可以设置几个选项,然后单击按钮运行报告。该报告应该向用户返回CSV文件下载提示。AngularJS CSV文件从API下载

我正在使用ui-router$resource服务。响应标题/ MIME类型设置正确,但CSV文件作为文本(由$resource处理程序启动)不作为文件返回。

我试图通过从$scope形成查询字符串直接创建下载链接,但不幸的是,我的API的身份验证方案使用自定义HTTP标头令牌,并且无法将其发送到API(它也在另一个子域中)通过一个锚标记,如这一个:

<a href="http://example.com/admin/report/csv?usertype=1&days=5">Run</a> 

有没有办法使用XHR请求(自定义标头)启动文件下载提示?

回答

4

我正在使用自定义标头令牌,因此通过简单链接下载报表是不可能的;该请求必须通过XHR进行。我的两部分的解决方案:

  1. 从API返回的CSV数据直接作为文本,删除文件attachment头。无论如何,这是正确的解决方案,因为它保持REST JSON API不受浏览器概念文件下载的影响。

  2. 将API响应数据包装在Blob中,然后使用https://github.com/eligrey/FileSaver.js启动文件下载。

一个缺点是这需要IE10 +,但对我来说这没问题。