vue+blob,文件流转word文档并实现下载功能

1、HTML中

<ul style="list-style: none;" ref="LDQZOne">
    <li v-for="(item,index) in form.ldqz">
        <el-button type="primary" @click="downloadDom(item)">下载附件</el-button>
    </li>
</ul>

2、要想在方法downloadDom()中成功操作dom,就需要在data里定义好要新建的元素

data() {
      return {
        elink:document.createElement('a'),
       },

3、方法里的写法要注意两点,一是务必要在发送请求时,规定responseType:‘blob’;二是在new blob()时务必也要规定下载文件的MIME 类型 {type: ‘application/msword’},msword为word ,其余类型可参考(http://www.w3school.com.cn/media/media_mimeref.asp)

downloadDom(document) {         
 //我是先在另一个接口拿到了文件名之后,再按后台的要求将文件名作为下载接口的参数,
 //大家按自己的需求写就行了,要是没有文件名,可以在下面自定义
        this.$http      //大家按自己的写法发请求
          .get("接口地址", {
            params: {
           	   url: document,   //文件名作为参数,后台要求的
             //参数按后台要求的上传就行
            },
            responseType:'blob'      //重点重点,,位置要写对,
           // 我刚开始没写在跟params同级,导致下载下来的数据就是乱码
          }).then(res => {
            let content = res.data;
            const blob = new Blob([content], {type: 'application/msword'});     //重点重点,,,
           
            //application/msword类型要规定对,自己下载的是什么类型就写对应的类型
            
            const fileName = document;      //这个为文件名,可以自定义
            if ('download' in this.elink) { // 非IE下载
              this.elink.download = fileName;
              this.elink.style.display = 'none';
              this.elink.href = URL.createObjectURL(blob);
              this.$refs.LDQZOne.appendChild(this.elink);
              this.elink.click();     //触发点击事件,实现文档下载
              URL.revokeObjectURL(this.elink.href); // 释放URL 对象
              this.$refs.LDQZOne.removeChild(this.elink);    //下载完成,移除新建的a标签
            } else { // IE10+下载
              navigator.msSaveBlob(blob, fileName)
            }
          })
          .catch(error => {
            console.log(error);
          });
      },
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值