前端实现下载excel、img、zip....方法有两种
1. 直接调接口进行下载 后端进行处理 多GET请求
2. 调取接口返回对应的文件流,前端进行处理 多POST请求
(1) zip下载:(未对IE浏览器做处理)
1 let dataStr = `taskId=${this.taskVal}&versionNo=${this.versionVal}&flag=${this.flagVal}`; 2 axios.get("/dq/task/record/detail/excel/exportDetail2?" + dataStr, { 3 responseType: ‘blob‘ // zip文件流需要添加,不然文件无法打开 4 }).then(res => { 5 let Res = new ResDatas({ 6 res, 7 }).init(); 8 let contentType = res.headers[‘content-type‘]; 9 let contentDisposition = res.headers[‘content-disposition‘]; 10 if(contentType.indexOf(‘application/json‘) != -1) { 11 this.$message({ 12 message: Res, 13 type: "warning" 14 }); 15 } else { 16 contentDisposition = contentDisposition.split(";")[1]; 17 let filename = contentDisposition.split("=")[1]; 18 let filenameStr = window.decodeURI(filename.split(",")[0],"utf-8"); // 下载的文件名称 19 _customDownLoadZipGet(res.data, filenameStr); 20 } 21 })
1 /** 2 * @name: 3 * @param {type} 4 * @return: 5 * @description: (前端)文件流转换 6 */ 7 export const _customDownLoadZipGet = (data, fileName) => { 8 const blob = new Blob([data]); 9 const downloadElement = document.createElement("a"); 10 const href = window.URL.createObjectURL(blob); 11 //后台再header中传文件名 12 downloadElement.href = href; 13 downloadElement.download = fileName; 14 document.body.appendChild(downloadElement); 15 downloadElement.click(); 16 document.body.removeChild(downloadElement); // 下载完成移除元素 17 window.URL.revokeObjectURL(href); // 释放掉blob对象 18 };
原文:https://www.cnblogs.com/PengZhao-Mr/p/14631639.html