项目场景:
客户需要一个在线预览功能打开pdf文件,且无法接受对话框的形式,故在使用pdfjs后改变了思路,如何让浏览器自行打开pdf文件流?
问题描述:
首先想到使用一些pdf框架去打开pdf,但是需要增加新的依赖,不好做
于是尝试是否可以直接打开url
let url = window.URL.createObjectURL(res.data);
window.open(url);
然而这种方式并不能成功打开pdf文件
解决方案:
在阅读了文章
https://www.zhihu.com/tardis/zm/art/654607936
后使用了利用blob创建url的形式打开
并且声明该文件为pdf文件格式
最终成功打开
代码:
Axios.get(url, {responseType: 'blob'}).then((data) => {
let responseData = data.data;
let blob = new Blob([responseData], { type: 'application/pdf;charset=utf-8' });
const href = URL.createObjectURL(blob);
window.open(href, 'newWindow');
})
实际上 new blob时type中charset=utf-8可以不需要