从 API 下载 AngularJS CSV 文件

Posted

技术标签:

【中文标题】从 API 下载 AngularJS CSV 文件【英文标题】:AngularJS CSV File Download from API 【发布时间】:2013-12-14 02:44:01 【问题描述】:

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

我正在使用ui-router$resource 服务。响应标头/mime 类型设置正确,但 $resource 处理程序以文本形式返回 CSV 文件(未启动文件下载)。

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

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

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

【问题讨论】:

【参考方案1】:

我使用的是自定义标头令牌,因此无法通过简单链接下载报告;必须通过XHR 提出请求。我的两部分解决方案:

    直接从 API 以文本形式返回 CSV 数据,删除文件 attachment 标头。无论如何,这是正确的解决方案,因为它使 REST JSON API 不关心文件下载,这是一个浏览器概念。

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

一个缺点是这需要 IE10+,但在我的情况下没问题。

【讨论】:

这似乎是合理的,但你有一个小提琴或要点作为例子吗?或者你可以用脚本更新答案吗?谢谢 感谢哈珀的回复。下午,请在 Harper 的帖子之后找到下面的一些代码,它就像一个魅力!在视图中: 在控制器中,假设其余服务返回一个对象,其成员名为 data ,其中包含 csv 原始数据: $scope.exportToCsv = function () ReportAction.runFullReport($ scope.filterCriteria).$promise.then(function (result) var blob = new Blob([result.data], type: "text/plain;charset=utf-8" ); saveAs(blob, "report .csv"); ), function() console.log('error'); ; ;

以上是关于从 API 下载 AngularJS CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 angularjs 从 PHP REST API 下载 docx 文件

使用 ANGULARJS 从 Jersey rest api 调用中下载/保存文件。文件附加响应为“Content-Disposition”

如何使用 jQuery Ajax 调用从 ASP.NET Web Api 下载 CSV 文件

使用 python 从 API 打开 csv 文件

C#如何从url下载csv文件[重复]

使用 web api 和 angularjs 下载 excel 文件