当前位置:   article > 正文

springboot+vue实现浏览器直接预览pdf文件_springboot+vue 预览pdf

springboot+vue 预览pdf

最近开发有个需求是,实现浏览器预览pdf文件,数据库存储的pdf文件url地址,通过url地址下载pdf文件,并返回流,最终实现pdf文件预览,需求不难,以下提供我的解决思路。

一,前端部分

点击按钮打开pdf

 

 打开实现打开pdf方法

  1. openpdf (url) {
  2. // window.open(url,'_blank');
  3. const sendurl = "/file/download";
  4. download(sendurl,{fileUrl:url}).then((res) => {
  5. const binaryData=[];
  6. binaryData.push(res)
  7. window.open(window.URL.createObjectURL(new Blob(binaryData,{'type':'application/pdf'})))
  8. let objectUrl = window.URL.createObjectURL(new Blob([res]));
  9. const elink = document.createElement('a');
  10. })
  11. },

发起请求的封装,responseType很重要,须设置为blob

  1. export function download(url,param,data) {
  2. return request({
  3. url: url,
  4. method: "post",
  5. params: param,
  6. data,
  7. responseType: 'blob',//将文件流转成blob对象
  8. noErrorMsg: false
  9. });
  10. }

二,后端部分

  1. @Value("${web.upload-path}")
  2. private String rootPath;
  3. @RequestMapping(value = "/download", method = RequestMethod.POST)
  4. public HttpServletResponse download(String fileUrl, HttpServletResponse response) throws IOException {
  5. // path是指欲下载的文件的路径。
  6. File file = new File(rootPath+"/"+fileUrl);
  7. // 取得文件名。
  8. String filename = file.getName();
  9. // 取得文件的后缀名。
  10. String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
  11. // 以流的形式下载文件。
  12. InputStream fis = new BufferedInputStream(new FileInputStream(rootPath+"/"+fileUrl));
  13. byte[] buffer = new byte[fis.available()];
  14. fis.read(buffer);
  15. fis.close();
  16. // 清空response
  17. response.setCharacterEncoding("utf-8");
  18. // response.setHeader("Content-disposition", "attachment;filename="+ filename + ".pdf");
  19. // 设置response的Header
  20. response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
  21. response.addHeader("Content-Length", "" + file.length());
  22. OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
  23. // response.setContentType("application/octet-stream");
  24. toClient.write(buffer);
  25. toClient.flush();
  26. toClient.close();
  27. return response;
  28. }

三,效果实现

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/172593
推荐阅读
相关标签
  

闽ICP备14008679号