vue+element+axios文件下载(post类型)
// 普通a标签下载
<a
class="download"
:href="companyMaintainsForm.downloadhttp"
download
:title="文件名"
>点我下载</a>
第四十行
this.globalFileName
是文件名
// 下载 click事件
uploadDown() {
let url = "company/getBusinessLicenseByCompanyId";
let formData = {
id: this.companyMaintainsForm.companyNewsList.id
};
this.downloadFile(url, formData); // 触发downloadFile方法
},
downFile(blob, fileName) {
// 非IE下载
if ("download" in document.createElement("a")) {
let link = document.createElement("a");
link.href = window.URL.createObjectURL(blob); // 创建下载的链接
link.download = fileName; // 下载后文件名
link.style.display = "none";
document.body.appendChild(link);
link.click(); // 点击下载
window.URL.revokeObjectURL(link.href); // 释放掉blob对象
document.body.removeChild(link); // 下载完成移除元素
} else {
// IE10+下载
window.navigator.msSaveBlob(blob, fileName);
}
},
downloadFile(url, data) {
let requestData = Object.assign({}, data, {
accessToken: sessionStorage.getItem("accessToken")
});
// 响应类型:arraybuffer, blob
this.$axios
.post(url, requestData, {
responseType: "blob"
})
.then(resp => {
let headers = resp.headers;
let contentType = headers["content-type"];
console.log("响应头信息", headers);
if (!resp.data) {
return false;
} else {
const blob = new Blob([resp.data], {
type: contentType
});
const contentDisposition = resp.headers["content-disposition"];
let fileName = this.globalFileName; // this.globalFileName 从后台获取的文件名字
if (contentDisposition) {
fileName = window.decodeURI(
resp.headers["content-disposition"].split("=")[1]
);
}
this.downFile(blob, fileName);
}
})
.catch(function (error) {
console.log(error);
});
},