使用Get方式传参
download() { let params = { pages: this.page, size: this.size, }; axios .get(this.$url + "/api/download", { params: params, responseType: "blob", // 1.首先设置responseType对象格式为 blob: // 二进制流 }) .then( (res) => { let blob = new Blob([res.data], { type: "application/vnd.ms-excel", }); // 2.获取请求返回的response对象中的blob 设置文件类型,这里以excel为例 let url = window.URL.createObjectURL(blob); // 3.创建一个临时的url指向blob对象 // 4.创建url之后可以模拟对此文件对象的一系列操作,例如:预览、下载 let a = document.createElement("a"); a.href = url; a.download = "下载文件.xlsx"; a.click(); // 5.释放这个临时的对象url window.URL.revokeObjectURL(url); }, (err) => { resolve(err.response); } ) .catch((error) => { reject(error); }); },
post 传参
download() { let params = { pages: this.page, size: this.size, }; axios .post( this.$url + "/api/download", params, { responseType: "blob", // 1.首先设置responseType对象格式为 blob: } ) .then((res) => { console.log(res); //把response打出来,看下图 let blob = new Blob([res.data], { type: "application/vnd.ms-excel", }); // 2.获取请求返回的response对象中的blob 设置文件类型,这里以excel为例 let url = window.URL.createObjectURL(blob); // 3.创建一个临时的url指向blob对象 // 4.创建url之后可以模拟对此文件对象的一系列操作,例如:预览、下载 let a = document.createElement("a"); a.href = url; a.download = "学生报道表.xlsx"; a.click(); // 5.释放这个临时的对象url window.URL.revokeObjectURL(url); this.diaShow = !this.diaShow; }) .catch((error) => { this.$message(error.message); }); },
接口调用成功后解析
const blob = new Blob([res.data], { // 创建一个新的Blob对象来接收后端的文件,这里第一个参数必须是数组类型,否则下载必出错。 type: 'application/vnd.ms-excel' // type,表明该 Blob 对象所包含数据的 MIME 类型,这需要前后端统一规划 }) let link = document.createElement('a') let body = document.querySelector('body') link.href = window.URL.createObjectURL(blob) // link.style.display = 'none' // 让这个a标签不可见 link.download = '文件名称' //文件名称 body.appendChild(link) link.click() // 创建了新的a标签之后模拟点击事件,开始传输文件 body.removeChild(link) // 下载完成之后,移除按钮,垃圾回收,减少页面内存消耗 window.URL.revokeObjectURL(link.href) // 移除之前使用createObjectURL创建的URL,垃圾回收
IE10+ 下载(未尝试)
//res 是后台返回的结果 const content = res.data; const blob = new Blob([content]); const fileName = "下载文件名"; //下载的文件名称 if ('download' in document.createElement('a')) { // 非IE下载 const elink = document.createElement('a'); elink.download = fileName; elink.style.display = 'none'; elink.href = URL.createObjectURL(blob); document.body.appendChild(elink); elink.click(); URL.revokeObjectURL(elink.href); // 释放URL 对象 document.body.removeChild(elink); } else { // IE10+下载 navigator.msSaveBlob(blob, fileName); }
来源:https://www.jianshu.com/p/cda41dd5a3df
https://blog.csdn.net/u013746071/article/details/87864085