1.问题描述:只有pdf下载,只有谷歌不能弹出直接下载,可以直接在搜狗浏览器或者360浏览器中下载。因为是Chrome浏览器,所以会打开PDF文件。可以在设置中关闭此功能。Chrome浏览器默认可以打开图片和PDF文件。其他文件可以使用上述方法下载。2.场景需求2.1接口需求导出pdf,接口需要是流文件在线预览pdf,接口需要是url,可以直接在谷歌浏览器中预览,但其他浏览器需要使用PDFJS插件导出xls,接口需要是url在线预览对于xls,接口需要是流文件。2.2后台开发。有A同事说接口必须要提供流文件,没时间存放在ftp服务器上。同事B习惯存放ftp服务器。如果下载的是pdf,而且必须是流媒体文件,否则谷歌浏览器无法直接弹出下载框。3.参考:1.vue项目调用接口下载文件--解决方案2.下载文件原因说明4.XLS和PDF导出代码示例onDownload(obj){this.downloadDisabled=true//下载按钮是否为disabledif(obj.suffix==='.pdf'){//是pdf格式this.axios.post('文件下载请求接口',this.$qs.stringify({filename:obj.fileName+obj.suffix//参数请求}),{responseType:'blob'//平时使用json经常会遇到后端返回的数据格式,不同的是blob,当后端返回一个文件流时使用。}).then((res)=>{console.log(res)letname=obj.fileName+'.pdf'letblob=resconsole.log(blob)this.downloadDisabled=falseif(window.navigator.msSaveOrOpenBlob){//当前浏览器是否支持默认弹出“保存”对话框navigator.msSaveBlob(blob,name)}else{//当前浏览器不支持直接弹出下载,执行下面leta=document.createElement('a')a.style.display='none'a.download=namea.href=URL.createObjectURL(blob)document.body.appendChild(a)//修复firefox无法触发点击a.click()document.body.removeChild(a)this.downloadDisabled=false//关闭禁用}}).catch((error)=>{console.log(error)this.downloadDisabled=false//关闭禁用})}else{//非pdf格式leta=document.createElement('a')a.style.display='none'a.download=obj.originalNamea.href=obj.urla.target='_blank'document.body。附加Child(a)//修复在firefoxa.click()中无法触发点击document.body.removeChild(a)this.downloadDisabled=false//Disabledisabled}}
