原因: 使用iframe src屬性,不能監(jiān)聽到什么時候后臺計算完成開始下載,故使用ajax請求,可以設(shè)置loading,確定請求結(jié)束時間,代碼如下:
function axiosDownload(src) {
axios({
method: 'get',
url: src,
responseType: 'blob',
}).then((res) => {
loadingInstance.close();
if (res.status === 200) {
const blob = new Blob([res.data], { type: 'application/octet-stream' });
const disposition = decodeURI(res.headers['content-disposition']); // 獲取filename
const fileName = disposition.substring(disposition.indexOf('filename=') + 10, disposition.length - 1);
const Link = document.createElement('a');
const href = window.URL.createObjectURL(blob); // 創(chuàng)建下載的鏈接
Link.href = href;
Link.download = fileName; // 下載后文件名
document.body.appendChild(Link);
Link.click(); // 點(diǎn)擊下載
document.body.removeChild(Link); // 下載完成移除元素
window.URL.revokeObjectURL(href); // 釋放掉blob對象
} else {
Message.error({
message: '下載文件失敗',
showClose: true,
});
}
}).catch((err) => {
loadingInstance.close();
Message.error({
message: `${err}`,
showClose: true,
});
});
}
設(shè)置 reponseType:'blob';為二進(jìn)制流,如果設(shè)置了沒有生氣,可以在request 請求信息中查看是否設(shè)置生效