vue elementui下载文件和使用vue-pdf展示pdf文件

1、下载blob文件

//在请求中必须标明:responseType: 'blob'。
比如this.$axois({
method: 'get',
url: '',
responseType: 'blob'
 }).then(response => {
    let data = response.data;
    //如果下载下来的是i二进制流,也可以通过new Blob[data]去转换成bolb对象再进行操作
    //下载错误时
   if(response.status !== 200) {
   let reader = new FileReader();
   reader.onload = function (event) {
   let content = reader.result;
   reader.readAsText(blob, "utf-8");
    return;
    } 
    let url = windows.createObjectUrl(data);
    //在dom中创建一个a标签,并默认点击
    le tlink = document.createElement('a');
   link.style.display = 'none';
   link.href = url;
    link.setAttribute('download', ‘filename.pdf');  
    document.body.appendChild(link);
   link.click();
}).catch(function(error) {});

如果前端想获取文件名,首先后端得设置
response.setHeaders(“Access-Control-Expose-Headers”, “Content-Disposition”); //如果不设置这,前端可以看到文件名获取不到文件名
response.setHeaders(“Content-Disposition”, “文件名”);
前端获取:response.headers[“Content-Disposition”].split(";")[1].split("=")[1]
在这里插入图片描述

2、下载并展示pdf


安装插件vue-pdf
npm install --save vue-pdf

然后引用,可全局在mian.js中也可局部在页面中引用
import pdf from 'vue-pdf'

注册组件
全局:Vue.component('pdf', pdf)
局部:在export default {
          ...
            components: {pdf},
            data() {
                   return {
                           pdf: '',
                           numPages: []
                   }
            }
       }
       
elementui中渲染的pdf
<pdf v-for="item in numPages" :key="item" :src="pdfUrl" :page="item"></pdf>

将文件下载下来
this.$axios({  
     method: 'get',
     url: '',
     responseType: 'blob'
 }).then(response => {
     let data = reponse.data;
     this.pdfUrl = this.getPdfUrl(data);
 }).catch(function(error) {});
 
getPdfUrl(file) {
    url = window.createObjectURL(file);//将文件转化成url
    //加载pdf
    let loadingTask = pdf.createLoadingTask(url);
    loadingTask.promise.then(pdf => {
           this.numPages = pdf.numPages;
     }).catch(err => {
           console.error('pdf 加载失败', err);
     })
     return url;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值