Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度将文件保存为csv导致失败-仅在Chrome上出现网络错误_Javascript_Angularjs_Google Chrome_Csv - Fatal编程技术网

Javascript 角度将文件保存为csv导致失败-仅在Chrome上出现网络错误

Javascript 角度将文件保存为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

我正在使用以下代码将文件另存为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    =  $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将不会被垃圾收集。