- 后台:把文件流获取成二进制形式并用base64加密返回
- 前端:把返回的二进制window.atob(data.content)解密,利用Uint8Array 数组类型(表示一个8位无符号整型数组)生成blos需要的ArrayBuffer
- 代码如下:
downloadFile().then(res => {
// base64解码
var binaryString = window.atob(res.data.content)
var len = binaryString.length
// Uint8Array: 8位无符号整数值的类型化数组
var bytes = new Uint8Array(len)
for (var i = 0; i < len; i++) {
// charCodeAt返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值):
bytes[i] = binaryString.charCodeAt(i)
}
const blob = new Blob([bytes.buffer], { type: '.csv' })
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob)
} else {
const elink = document.createElement('a')
elink.download = '123456.csv'
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
document.body.removeChild(elink)
}
})
如有错误,望请指正。
网友评论