utils/request.js
post: function (url, data,responseType) {
return new Promise((resolve, reject) => {
axios.post(url, data,{responseType}).then(response => {
resolve(response)
}).catch(error => {
reject(error)
})
})
}
api/index.js
export const recordExport = (data) => {
return request.post(`${apiYJH}api/applyRecord/recordExport`, data,'arraybuffer')
}
实际使用:
recordExport({
ids:this.selectionIds
}).then(res=>{
console.log(1111,res);
var blob = new Blob([res.data || res],{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'})
var downloadElement = document.createElement('a');
var href = window.URL.createObjectURL(blob); //创建下载的链接
downloadElement.href = href;
downloadElement.download = '导出xlsl数据.xlsx'; // 下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); // 点击下载
document.body.removeChild(downloadElement); // 下载完成移除元素
window.URL.revokeObjectURL(href); // 释放掉blob对象
/*如果返回为图片时候
let url= arrayBufferToBase64(res);//res为后台返回的ArrayBuffer
document.getElementById('img').src='data:image/jpeg;base64,'+url;
*/
}).catch(err=>{
console.log(err ,'[[[')
})
-
可能会出现的问题: 请求返回的全局拦截器进行了拦截,因此可以对返回的内容进行判断来处理
axios.interceptors.response.use((res) => { if (res.data.code == 200 || res.data.status_code == 200) { return Promise.resolve(res.data) } else if(res.data.code == 401) { ... } else { //当返回的为流文件,并且为[object Blob]的时候 if(res.status ==200 && Object.prototype.toString.call(res.data) == '[object Blob]' ||&& Object.prototype.toString.call(res.data) == '[object ArrayBuffer]'){//解决头像html2canvas会出现的问题外联无法下载问题,解决为后台直接返回流会被这个返回拦截器拦截到错误 return Promise.resolve(res.data) } Message.error(res.data.status_desc || 'Error'); return Promise.reject(res.data); } }, (err) => { // tryHideFullScreenLoading(); // Message({ message: err.message, type: 'error' }) return Promise.reject(err) })