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