responseType设置arraybuffer 后 response.data为{}
时间: 2024-02-23 13:03:15 浏览: 46
如果设置了`responseType`为`arraybuffer`,则`response.data`将返回一个`ArrayBuffer`对象,而不是JavaScript对象。因此,你可以使用`new Uint8Array(response.data)`将`ArrayBuffer`对象转换为字节数组,然后再将字节数组转换为Blob对象。
下面是一个示例代码:
```
import axios from 'axios'
import FileSaver from 'file-saver'
axios({
url: '/download',
method: 'get',
responseType: 'arraybuffer'
}).then(response => {
const data = new Uint8Array(response.data)
const blob = new Blob([data], {type: 'application/octet-stream'})
FileSaver.saveAs(blob, 'file.xlsx')
}).catch(error => {
console.log(error)
})
```
在这个示例代码中,我们首先将`response.data`转换为一个`Uint8Array`类型的对象,然后再将其转换为Blob对象。最后,我们使用FileSaver.js库将Blob对象转换为文件并下载。
如果你的后端返回的是`Result<ResponseEntity<byte[]>>`对象,可以在响应拦截器中获取到`ResponseEntity<byte[]>`对象,并将其中的二进制数据转换为`ArrayBuffer`对象,然后按照上面的方法来处理。