共计 1387 个字符,预计需要花费 4 分钟才能阅读完成。
一、问题形容:
只有 pdf 下载唯有谷歌无奈弹出间接下载,在搜狗浏览器或者 360 浏览器之类的就能够间接下载了。因为是 Chrome 浏览器,所以才会关上 PDF 文件,该性能是能够在设置中敞开的,Chrome 浏览器默认能够关上图片和 PDF 文件,其它文件应用上述形式是能够下载的。
二、场景需要
2.1 接口需要
- 导出 pdf,须要接口为流文件
- 在线预览 pdf,须要接口为 url,在谷歌浏览器可间接预览,但在其余浏览器须要应用 PDFJS 插件
- 导出 xls,须要接口为 url
- 在线预览 xls,须要接口为流文件
2.2 后盾开发
有的 A 共事说 接口得提供流文件,没工夫做寄存 ftp 服务器。B 共事习惯做寄存 ftp 服务器。如果 pdf 下载,何况必须做流文件,否则谷歌浏览器无奈间接弹出下载框。
三、参考:
- 1.vue 我的项目调用接口下载文件 – 解决方案
- 2. 下载文件起因形容
四、XLS 与 PDF 导出代码示例
onDownload (obj) { | |
this.downloadDisabled = true // 下载按钮是否管制禁用 | |
if (obj.suffix === '.pdf') { // 是 pdf 格局 | |
this.axios.post('文件下载申请接口', this.$qs.stringify({filename: obj.fileName + obj.suffix // 参数申请}), {responseType: 'blob' // 平时 用 json 常遇到后端返回的数据格式。不同的是 blob, 当后端返回一个文件流时候会用到。}) | |
.then((res) => {console.log(res) | |
let name = obj.fileName + '.pdf' | |
let blob = res | |
console.log(blob) | |
this.downloadDisabled = false | |
if (window.navigator.msSaveOrOpenBlob) { // 以后浏览器是否反对默认弹出 "保留" 对话框 | |
navigator.msSaveBlob(blob, name) | |
} else { // 以后浏览器不反对间接弹出下载,执行以下 | |
let a = document.createElement('a') | |
a.style.display = 'none' | |
a.download = name | |
a.href = URL.createObjectURL(blob) | |
document.body.appendChild(a) // 修复 firefox 中无奈触发 click | |
a.click() | |
document.body.removeChild(a) | |
this.downloadDisabled = false // 敞开禁用 | |
} | |
}) | |
.catch((error) => {console.log(error) | |
this.downloadDisabled = false // 敞开禁用 | |
}) | |
} else { // 非 pdf 格局 | |
let a = document.createElement('a') | |
a.style.display = 'none' | |
a.download = obj.originalName | |
a.href = obj.url | |
a.target = '_blank' | |
document.body.appendChild(a) // 修复 firefox 中无奈触发 click | |
a.click() | |
document.body.removeChild(a) | |
this.downloadDisabled = false // 敞开禁用 | |
} | |
} |
正文完