摘要
现在需要做个excel表下载,后端给的时出参是base64,
代码
let passwordsSet = t('password-set'); //国际化t()
let passwordsSetSuccessfully = t('Password-set-downloaded-successfully');
let passwordsSetFailed = t('Password-set-downloaded-failed');
const saveAs = (params) => {
ExportPasswordAndUserCodeList(params)
.then((res) => {
if (res.success) {
//主要是 downloadFileByBase64()
// type 定义的是你要下载格式,我这边接口返回没有给我,所以我自己拼的excel
let type =
'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,';
downloadFileByBase64(
`${type}${res.data}`, // 接口出参
`${locationQuery.name}${passwordsSet}`, // 导出文件名name
);
message.success(
`${locationQuery.name}${passwordsSetSuccessfully}.xlsx`,
);
setDLoadings(false);
} else {
message.error(`${locationQuery.name}${passwordsSetFailed}.xlsx`);
setDLoadings(false);
}
})
.catch((err) => {
message.error(err.msg);
setDLoadings(false);
});
};
此处接口给了type类型,所以不需要了自己拼了
function downloadFileByBase64(base64, name) {
var myBlob = dataURLtoBlob(base64);
var myUrl = URL.createObjectURL(myBlob);
downloadFile(myUrl, name);
}
// 处理base64
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
// 下载
function downloadFileByBase64(base64, name) {
var myBlob = dataURLtoBlob(base64);
var myUrl = URL.createObjectURL(myBlob);
downloadFile(myUrl, name);
}