从API下载AngularJS CSV文件

从API下载AngularJS CSV文件,angularjs,download,angular-ui-router,angular-resource,ngresource,Angularjs,Download,Angular Ui Router,Angular Resource,Ngresource,我有一个管理员控制面板,管理员用户可以在其中设置一些选项,然后单击按钮运行报告。报告应向用户返回CSV文件下载提示 我正在使用ui路由器和$resource服务。响应头/mime类型设置正确,但CSV文件由$resource处理程序以文本形式返回(未启动文件下载) 我尝试直接创建下载链接,通过从$scope形成查询字符串,但不幸的是,我的API的身份验证方案使用自定义HTTP头令牌,无法通过锚标记将其发送到API(也在另一子域上),例如: <a href="http://example.c

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

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

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

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


是否有方法使用XHR请求(带有自定义头)启动文件下载提示?

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

  • 直接以文本形式从API返回CSV数据,删除文件
    附件
    标题。无论如何,这是正确的解决方案,因为它使RESTJSONAPI与文件下载无关,文件下载是一种浏览器概念

  • 将API响应数据包装在
    Blob
    中,然后用于启动文件下载


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

    这似乎是合理的,但你有没有提琴或要点作为例子?或者你能用脚本更新答案吗?感谢汉克斯·哈珀的回复。下午,请找到下面的代码如下哈珀后,工作像一个魅力位!视图:在控制器中,假设rest服务返回一个包含csv原始数据的名为data的成员的对象:$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');};