文件下载的时候 后台返回数据流 转换blob 下载 (亲测有效)
1.数据流 只需要在router 里面添加一个 responseType格式
downloadArchiveData(params) {
return myAxios({
method: 'post',
url: '/olap-apply/caseArchive/downloadArchiveData',
params: params,
responseType: 'blob' (只需要在这添加一个格式)
})
},
下面代码可直接使用
let data = res.data
let url = window.URL.createObjectURL(new Blob([data]))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', '下载.zip') (下载什么格式 更改什么格式,后面是下载出来的名字)
document.body.appendChild(link)
link.click()
2.后台返回的是二进制的数据流 因为是统一封装的 从新写了个axios请求
import axios from 'axios'
import {StorageService} from '~/utils/storage.service';
private toDownload(row) {
const params = {
fileid: row.logFileId
}
let processUrl = require(`../../../environment/${process.env.BUILD_ENV}.env.js`);
let download = JSON.parse(processUrl.URL.SERVER);
axios({
headers: {
'x-cf-antifraud-prod-token': StorageService.getItem('userToken')
},
method: 'get',
url: download + '/domain-service/api/taskBoxController/downloadFile',
responseType: 'json',
params: {
fileid: row.logFileId
}
}).then((res) => {
let bstr = atob(res.data.data);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
let bl = new Blob([u8arr], {type: res.headers['content-type']});
let url = URL.createObjectURL(bl);
let a = document.createElement("a");
a.href = url;
a.download = res.data.fileName;
a.click();
window.URL.revokeObjectURL(url);
})
}
```