Javascript 使用Angular JS下载大型CSV文件

Javascript 使用Angular JS下载大型CSV文件,javascript,angularjs,csv,Javascript,Angularjs,Csv,我正在做一个项目,当用户单击下载按钮时,我会向运行Restify节点的服务器发出一个XHR请求。来自服务器的响应是CSV格式的字符串。我在下载非常大的文件时遇到一些问题(在我的特定情况下,返回的CSV字符串长度为6406729个字符)。对于小的CSV文件,我的方法在Chrome上非常有效,但是对于这个非常大的文件,没有任何下载 networkService.search($scope.query).then(function(data) { //data is a string. Whe

我正在做一个项目,当用户单击下载按钮时,我会向运行Restify节点的服务器发出一个XHR请求。来自服务器的响应是CSV格式的字符串。我在下载非常大的文件时遇到一些问题(在我的特定情况下,返回的CSV字符串长度为6406729个字符)。对于小的CSV文件,我的方法在Chrome上非常有效,但是对于这个非常大的文件,没有任何下载

networkService.search($scope.query).then(function(data) {
    //data is a string. When it is 6,406,729 chars long, this code doesn't 
    //work.  I've tested this code on strings that are 100 chars long 
    //and it works perfectly
    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:attachment/csv,' + encodeURI(data);
    hiddenElement.target = '_blank';
    hiddenElement.download = fileName;
    hiddenElement.click();
})
.catch(function() {
    //handle error
})
.finally(function() {
   //clean up code
   // We reach this point in the code no matter how long "data" is
   console.log('reached finally');
});
设置
hiddenElement.href
的值后,其长度为8746983个字符。这对我来说意味着encodeURI工作正常,之后可能会失败(我猜是click方法)。关于Stack Overflow的大多数帖子似乎都建议我下载CSV的方法,正如我前面提到的,它适用于相当小的CSV文件,没有任何问题,只是不适用于我的大CSV文件

我收集到的另一个有趣的信息是,如果我复制
networkService
发出的
GET
请求并将其放在Chrome的搜索栏中,我就可以下载这个大文件。对我来说,这表明我的角度代码有问题,但我也不确定问题出在哪里


任何帮助都将不胜感激

我猜问题不在于点击,而在于
href
的长度,这在所有浏览器中都是不同的。目前我认为chrome有一个最大的数据uri大小,看看下面的解决方案,它对我很有用