1、正常导出的情况:(使用axios发送请求)后端返回二进制文件
api文件
async download(params) {
return await $axios.$post(`url`,params,{ responseType: 'arraybuffer'})
},
调用api
let formData = new FormData();
formData.append('file',file);//传文件
this.$api.download(formData).then(res=>{
const data = new Blob([res],{type:'application/vnd.ms-excel'})
const url = URL.createObjectURL(data)
const a = document.createElement('a')
a.href = url
a.download = 'table.xls'
a.click()
// 释放这个临时的对象objectUrl
URL.revokeObjectURL(url)
}
2、如果数据量过多则后端返回错误信息
由于请求的时候设置了responseType:’arraybuffer’,返回的是数据流,要取得json信息需要进行转换:
let enc = new TextDecoder('utf-8')
let data = JSON.parse(enc.decode(new Uint8Array(res.data)))
错误提示为:(此处简化了)
$axios.onError(error => {
let enc = new TextDecoder('utf-8')
let blob = JSON.parse(enc.decode(new Uint8Array(error.response.data)))
Vue.prototype.$message.error(blob.data);
})
ok,到这里为止就解决问题了。