//best64转Blob
const dataURLtoBlob = function (baseData) {
var bstr = atob(baseData)
var n = bstr.length;
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: `application/pdf;charset-UTF-8;application/vnd.ms-excel` });
};
// 下载pdf
// baseData是后端传来的base64,fileName是文件名
export function fileDownload(baseData, fileName) {
let URL = dataURLtoBlob(baseData.substring(baseData.indexOf(',') + 1));
var reader = new FileReader();
reader.readAsDataURL(URL);
reader.onload = function (e) {
// 兼容IE
if (window.navigator.msSaveOrOpenBlob) {
var bstr = atob(e.target.result.split(",")[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
var blob = new Blob([u8arr]);
window.navigator.msSaveOrOpenBlob(blob, fileName);
} else {
// 转换完成,创建一个a标签用于下载
const a = document.createElement('a');
a.download = fileName; // 这里写你的文件名
a.href = e.target.result;
document.body.appendChild(a)
a.click();
document.body.removeChild(a)
}
}
}
特别注意:有时候后端返回的base64数据自带了前缀data:application/pdf;base64,
如果 不去掉这个前缀 会报 failed to execute 'atob' on 'window': the string to be decoded is not correctly encoded. 这个错误。处理方式如下:
let URL = dataURLtoBlob(baseData.substring(baseData.indexOf(',') + 1));