在前端开发中,有时需要将生成的数据以Excel文件的形式导出,常见的方法是使用后端处理并返回文件流给前端下载。一般后端是返回二进制文件流,但如果有些项目后端开发不能返回文件流,而是返回给前端一串base64字符串,那我们应该怎么实现导出功能呢?
两个方法,用来处理base64字符串
export const b64toBlob = (b64Data) => {
const arr = b64Data.split(',')
const mime = arr[0].match(/:(.*?);/)[1]
const bstr = atob(arr[1])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new Blob([u8arr], { type: mime })
}
export const downloadBase64File = (b64Data, file) => {
const blob = b64toBlob(b64Data)
const url = window.URL.createObjectURL(blob)
const downloadLink = document.createElement('a')
downloadLink.href = url
downloadLink.download = file
downloadLink.click()
}
其中,
b64toBlob
:处理base64字符串的方法downloadBase64File
:我们实际调用的方法,把base64字符串 和 导出的文件名+格式,如’你好JS.xlsx’放在第二个参数传入downloadBase64File方法
使用示例:
const postRes = await postData(
'ZCO_QK_6005_SRV',
'QuerySet',
testpostJson
)
if (postRes && postRes.d) {
console.log('postRes.d.ExportFile...', postRes.d.ExportFile);
downloadBase64File(postRes.d.ExportFile, '款项类型明细.xlsx')
}
天下无难事,只怕有心人。