我正在开发一个项目,当用户点击下载按钮时,我向运行Node with Restify的服务器发出XHR请求。服务器的响应是CSV格式的字符串。我在下载非常大的文件时遇到了一些问题(在我的特定情况下,返回的CSV字符串长度为6,406,729个字符)。在小型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
的值后,长度为8,746,983个字符。这告诉我,encodeURI正常工作,并且它后面的东西可能会失败(我的猜测是它的点击方法)。 Stack Overflow上的大多数帖子似乎都建议我下载CSV的方法,正如我之前提到的,它适用于相当小的CSV文件而没有任何问题,只是不适用于我的大型CSV。
我收集的另一个奇怪的信息是,如果我复制GET
networkService
请求并将其放入Chrome的搜索栏,我就能够下载大文件。对我来说,这表明我的Angular代码有问题,但我再也不确定是什么问题。
非常感谢任何帮助。