uniapp将后端返回的base64下载为word文件
时间: 2023-12-05 15:03:25 浏览: 44
在 Uniapp 中,可以使用以下代码将后端返回的 base64 字符串下载为 Word 文件:
```javascript
// 将 base64 字符串转换为 ArrayBuffer
const base64ToArrayBuffer = (base64) => {
const binary = atob(base64)
const length = binary.length
const buffer = new ArrayBuffer(length)
const view = new Uint8Array(buffer)
for (let i = 0; i < length; i++) {
view[i] = binary.charCodeAt(i)
}
return buffer
}
// 将 ArrayBuffer 转换为文件并保存到本地
const saveBase64AsFile = (base64, filename) => {
const arrayBuffer = base64ToArrayBuffer(base64)
const blob = new Blob([arrayBuffer], { type: 'application/octet-stream' })
const url = URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = filename
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
URL.revokeObjectURL(url)
}
// 下载 Word 文件
const downloadWordFile = () => {
uni.request({
url: 'your api url',
method: 'GET',
responseType: 'arraybuffer', // 指定响应类型为 ArrayBuffer
success: (res) => {
const base64Str = btoa(new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '')) // 将 ArrayBuffer 转换为 base64 字符串
const filename = 'your filename.docx'
saveBase64AsFile(base64Str, filename)
},
fail: (err) => {
console.log(err)
}
})
}
// 调用示例
downloadWordFile()
```
其中,`downloadWordFile` 函数使用 `uni.request` 发送 GET 请求获取后端返回的 Word 文件的二进制数据,指定响应类型为 ArrayBuffer,然后将 ArrayBuffer 转换为 base64 字符串,并调用 `saveBase64AsFile` 函数将其下载为 Word 文件。在调用 `btoa` 函数将 ArrayBuffer 转换为 base64 字符串时,需要先将 ArrayBuffer 转换为 Uint8Array 类型,再使用 `reduce` 方法将其转换为字符串。