场景描述:
框架采用ruoyi-vue前后端分离版,移动端采用uniapp的H5
前端展示服务器上的pdf,不采用远程地址访问的方式,如:
http://xxx.xxx.xx.xxx:/web/test1234.pdf这种方式不安全,可以随意访问web资源路径
本文采用的方式:Vue端及uniapp端通过接口获取pdf文件流返回到前端并显示。
后端服务代码
![](https://i-blog.csdnimg.cn/blog_migrate/519f76e6520262dbdcbb13d39cc46a43.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8bb02d393e05c3bafab13690bec52c49.png)
Vue端
采用iframe展示,代码如下:
Index.vue代码:
![](https://i-blog.csdnimg.cn/blog_migrate/dabd7fc46c0839691c04e699ae3a9e4d.png)
download(pdfName) {
downloadPdf(pdfName).then(res=>{
let blob = new Blob([res], { type: 'application/pdf' })
this.pdfUrl = URL.createObjectURL(blob) + '#toolbar=0'
});
}
pdfdownload.js代码
export function downloadPdf(pdfUrl) {
return request({
url: '/app/file/download/'+pdfUrl,
method: 'get',
responseType: 'arraybuffer',//一定要设置响应类型,否则页面会是空白pdf
headers: {
'Content-Type': 'application/json'
}
})
}
Uniapp端
https://ext.dcloud.net.cn/plugin?id=2187 安装插件,
把hybrid整个文件夹放到自己项目的根目录下,与static、App.vue同级的目录
Index.vue代码
![](https://i-blog.csdnimg.cn/blog_migrate/690279b63e96e6b7f9ad79fb39b47ced.png)
Config.pdfUrl: '/hybrid/html/web/viewer.html?pdfUrl='
![](https://i-blog.csdnimg.cn/blog_migrate/5c551bcff6e374779c5f5a19aac2df91.png)
Hybrid/html/web/viewer.html添加js
在末尾的body中添加如下代码:
![](https://i-blog.csdnimg.cn/blog_migrate/adabb7632742951f9cf38671535f0f50.png)
图1
![](https://i-blog.csdnimg.cn/blog_migrate/2833b01aeec64e3c922bc40a2d2162e5.png)
图2
![](https://i-blog.csdnimg.cn/blog_migrate/f97597a29eb9bf10f3bcfe4cf88c152f.png)
图3
![](https://i-blog.csdnimg.cn/blog_migrate/f793ecb9dc586d5c31a91b385c8e9dda.png)
图4
可以把图2中的getAccessToken方法去掉,图3的beforeSend去掉。
Viewer.js修改
![](https://i-blog.csdnimg.cn/blog_migrate/ffffe3556128d1b2c204f7bdd14f66b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dabede94dec4edf6e0f82b73daf38a89.png)