从'axios'导入{getToken}从'@/utils/auth'constmimeMap={xlsx:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',zip:'application/zip'}constbaseUrl=process.env.VUE_APP_BASE_APIexportfunctiondownloadExcel(str,type="xlsx",filename){axios({method:'get',url:baseUrl+str,responseType:'blob',headers:{'Authorization':'Bearer'+getToken()}}).then(res=>{resolveBlob(res,mimeMap[type])})}/***解析blob响应内容并下载*@param{*}resblob响应内容*@param{String}mimeTypeMIME类型*/exportfunctionresolveBlob(res,mimeType){varblob=newBlob([res.data],{type:mimeType});//从响应头中获取文件名,后端response.setHeader("Content-disposition","attachment;filename=xxxx.xlsx")setfilename;varpatt=newRegExp('文件名=([^;]+\\.[^\\.;]+);*');varcontentDisposition=decodeURI(res.headers['content-disposition']);var结果=patt.exec(内容配置);变种文件名=结果[1];fileName=fileName.replace(/\"/g,'');constObjectUrl=URL.createObjectURL(blob);//对于标签,只有Firefox和Chrome(内核)支持download属性if('download'indocument.createElement('a')){constaLink=document.createElement('a');aLink.href=ObjectUrl;aLink.setAttribute('download',fileName)//设置下载文件名document.body.appendChild(aLink)aLink.click()window.URL.revokeObjectURL(ObjectUrl)//释放URL对象}else{//IE浏览器兼容方法window.navigator.msSaveBlob(blob,fileName)}}备注:本质是获取后台文件流数据,然后在前端转成二进制文件,通过a标签的download属性下载
