Javascript 角度将文件保存为csv导致失败-仅在Chrome上出现网络错误
我正在使用以下代码将文件另存为csvJavascript 角度将文件保存为csv导致失败-仅在Chrome上出现网络错误,javascript,angularjs,google-chrome,csv,Javascript,Angularjs,Google Chrome,Csv,我正在使用以下代码将文件另存为csv $scope.saveCSVFile = function (result) { var a = document.createElement('a'); a.href = 'data:application/csv;charset=utf-8,' + encodeURIComponent(result.data); a.target = '_blank'; a.download = $sco
$scope.saveCSVFile = function (result)
{
var a = document.createElement('a');
a.href = 'data:application/csv;charset=utf-8,' + encodeURIComponent(result.data);
a.target = '_blank';
a.download = $scope.getFileNameFromHttpResponse(result);
document.body.appendChild(a);
a.click();
$scope.isReportInProgress = false;
};
该文件在大多数情况下都能正常工作,但由于某些原因,当该文件大于10MB时,我会得到“失败-网络错误”
它只发生在铬上
我试图在网上搜索这个问题,但找不到任何相关内容
你能想出一个主意为什么会这样吗?或者使用另一种在chrome/firefox/IE上工作的保存文件方法,而不是我的功能?我最终使用了这个方法,希望它能帮助下一个遇到这个问题的人:
var blob = new Blob([result.data], {type: 'text/csv'});
var filename = $scope.getFileNameFromHttpResponse(result);
if(window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, filename);
}
else{
var elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = filename;
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
}
我有一个类似的问题,但必须提供一个zip文件,以base64格式从服务器发送。这对我有什么好处:
function downloadBlob(data, filename) {
const blob = new Blob([new Buffer(data, 'base64')], {type: 'application/octet-stream'});
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, filename);
} else {
const elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = filename;
document.body.appendChild(elem);
elem.click();
window.URL.revokeObjectURL(elem.href);
document.body.removeChild(elem);
}
}
return (
{/* ... */}
<a href="#" onClick={() => {downloadBlob(report.zip, `${report.filename}.zip`)}}>
Download <b>{report.filename}.zip</b>
</a>
{/* ... */}
);
函数下载blob(数据,文件名){
const blob=new blob([new Buffer(data,'base64')],{type:'application/octet stream'});
if(window.navigator.msSaveOrOpenBlob){
window.navigator.msSaveBlob(blob,文件名);
}否则{
常量elem=window.document.createElement('a');
elem.href=window.URL.createObjectURL(blob);
elem.download=文件名;
文件.正文.附件(elem);
元素单击();
window.URL.revokeObjectURL(elem.href);
文件.body.removeChild(elem);
}
}
返回(
{/* ... */}
{/* ... */}
);
我之所以离开这个函数,是因为它在提供文件后会撤销URL。是保存blob客户端的一个很好的替代方法。它解决了浏览器的差异这救了我!我怀疑我需要使用BLOBAPI,但不确定该错误是否相关。谢谢你,我做得很好,今天过得很愉快!谢谢;-)不要忘记URL.revokeObjectURL(),否则blob将不会被垃圾收集。