我有一个从http请求生成csv的rails服务器,如下所示:
@results = some_json_string
require 'csv'
csv_string = CSV.open("results.csv","wb") do | csv|
JSON.parse(@results).each do |hash|
csv << hash.values
end
end
send_file('results.csv')
还有一个从服务器请求此CSV文件的AngularJS应用程序
angular.module('myApp')
.controller('QueryCtrl', ['$scope', 'Query', function ($scope, Query) {
$scope.csvSubmit = function() {
var csv = $.post('http://ip_addr:3000/api/csv', { 'input': 'my_request' });
csv.done(function(result){
File.save(result, function(content){
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/csv,' + encodeURI(content);
hiddenElement.target = '_blank';
hiddenElement.download = 'result.csv';
hiddenElement.click();
});
});
}
}
])
看起来,当Angular应用发出http请求时,Rails服务器会通过csv文件进行发送。
从rails日志中:
GET /professional/maintain/status/ 200 224 - - 0 2908 - -\n"}
Sent file results.csv (0.1ms)
Completed 200 OK in 976ms (ActiveRecord: 0.0ms)
但是,Angular应用程序无法成功将文件下载到客户端计算机。相反,javascript控制台显示此错误:
Uncaught TypeError: undefined is not a function query.js:8
第8行是这一行:
File.save(result, function(content){
任何人都有一个想法如何使此下载正常工作?
编辑:这可能是语法问题,因为我实际上没有编写太多的JavaScript。当我看着它时,我不能确定为什么它会告诉我undefined不是一个函数。
文件没有保存MDN文档的方法,您应该可以通过以下方式完成下载
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/csv,' + encodeURI('test,1234,1232,test');
hiddenElement.target = '_blank';
hiddenElement.download = 'result.csv';
hiddenElement.click();
没有任何File.save(result,function(content){}); 功能性
在控制台中运行以上代码,将开始下载带有我传入的内容的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句