AngularJS – 接收和下载CSV

我使用nodeJS程序作为服务器,AngularJS Web应用程序作为客户端。

要创buildCSV,我使用“express-csv”库( https://www.npmjs.com/package/express-csv )

这是我的服务器端代码:

定义:

var app = express(); var csv = require('express-csv'); 

获取代码:

 app.get('/exportDB', function(req, res){ res.csv([ ["a", "b", "c"] , ["d", "e", "f"] ]); 

这是我的客户端代码:

 $http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response){ // HERE I NEED A WAY TO DOWNLOAD THE RECEIVED CSV }); 

不用说,它到达服务器,其他一切正常工作,但我找不到方法来下载CSV。 请帮助。

PS

请不要说这是一个重复的提示csv文件下载popup使用node.js和node-csvparsing器(节点模块),因为客户端没有真正提到那里。 另外,其他问题都集中在服务器端而不是客户端。 没有其他的问题涉及AngularJS客户端。

       

网上收集的解决方案 "AngularJS – 接收和下载CSV"

你可以浏览:

 location.href = "http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB"; 

我面临同样的问题,上面提到的解决scheme与Chrome和Firefox,但Safari和IE浏览器不兼容。

尝试了下面的黑客,它为我工作 –

var url="http://'+$localStorage.ip+':"+$localStorage.port+'/exportDB'; var form = angular.element("<form action='" + url +"'></form>"); form.submit();

文件下载将由浏览器自己处理。 虽然以下是对它的限制 –

  1. 你将无法处理您的http获取电话(如果有的话):(为此尝试使用try-catch块的JavaScript,但没有很好地工作…
  2. ..你不能够unit testing这段代码:( 🙁

还有另外一种方法可行,

var url="http://'+$localStorage.ip+':"+$localStorage.port+'/exportDB'; $window.location.href = url;

build议和讨论欢迎!

你可以创build一个标签并点击它:

  $http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response) { var dataURI = 'data:application/octet-stream;base64,' + btoa(response); $('<a></a>').attr({ download: 'db.csv', href: dataURI })[0].click(); }); 

有下载csv的方法。 第一种方法是创build一个标签并点击它

在下面的代码数据中添加mimeType:application / octet-stream

 var a = document.createElement('a'); a.href = 'data:'+mimeType+';charset=utf-8;base64,' + response; a.target = '_blank'; a.download = "name the file here"; document.body.appendChild(a); a.click(); 

但是这个解决scheme在IE> 9和safari> 6上不起作用

因为safari不会跟随锚标签的下载属性

所以对于safari你可以使用filesaver.js

和IE这个解决scheme将工作

 if (window.navigator.msSaveOrOpenBlob){ // base64 string var base64str = response; // decode base64 string, remove space for IE compatibility var newstr =base64str.replace(/\s/g, ''); var binary = atob(newstr); // get binary length var len = binary.length; // create ArrayBuffer with binary length var buffer = new ArrayBuffer(len); // create 8-bit Array var view = new Uint8Array(buffer); // save unicode of binary data into 8-bit Array for (var i = 0; i < len; i++) { view[i] = binary.charCodeAt(i); } // create the blob object with content-type "application/csv" var blob = new Blob( [view], { type: mimeType }); window.navigator.msSaveOrOpenBlob(blob, "Name your file here"); }