0
点赞
收藏
分享

微信扫一扫

原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。


原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。_下载文件

 解决上面的问题,请用如下代码:

<script>

let exportExcel = function (apiUrl, postData, downloadFileName, headers, cb) {
//apiUrl, postData, downloadFileName, headers, cb(传参说明:接口路径,接口传参,下载文件名,头部信息,回调函数)
(typeof postData !== 'string') && (postData = JSON.stringify(postData));
downloadFileName || (downloadFileName = '下载文件.xlsx');//如果.xlsx无法打开就改为.xls后缀名
let xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLDOM');
xhr.open('POST', apiUrl, true);
xhr.responseType = 'blob';
// 这里的header内容根据具体业务来调整参数:
xhr.setRequestHeader('cookie', '你的cookie');
xhr.setRequestHeader('sessionId', '你的sessionId');
// ----------------------------------------
xhr.onreadystatechange = function () {

if (xhr.readySsate === 4) {
if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
cb && cb(true);//下载成功
let blobData = xhr.response;
let reader = new FileReader();
reader.readAsDataURL(blobData), reader.onload = function (e) {
let a = document.createElement('a');
a.download = downloadFileName, a.href = blobData.size < 32767 ? e.target.result : URL.createObjectURL(blobData), a.style.display = 'none';
document.body.appendChild(a), a.click();
URL.revokeObjectURL(a.href), document.body.removeChild(a);
};
} else {
cb && cb(false);//下载失败
}
} else {
cb && cb(false);//下载失败
}

};
};

//调用方法:exportExcel(接口路径,接口传参,下载文件名,头部信息,回调函数)

</script>

举报

相关推荐

0 条评论