vue 后端接口返回文件流 前端导出excel

 文件导出有多种方式,不同的前后台框架使用的方法也不尽相同。一般有两种方式:一是后端在服务器上生成一个文件,然后提供一个链接地址给前台下载;二是后台返回文件流,前端自己封装方法进行下载。

下面介绍vue中使用后台返回文件流,前端导出excel文件的方法

后台返回文件流:

 前端vue中使用blob来操作:


<div class="file-select">
     <el-input  v-model="file.name"/>
     <el-button @click="selectFile">选择文件</el-button>
     <el-button  :disabled='!file.name'  @click="sureData">确定</el-button>
</div>
 
  <input
      id="importInputFile"
      type="file"
      accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
      @change="uploadFile"
      style="display:none">
    selectFile(){
      document.getElementById('importInputFile').click()
    },
    //导入文件
    uploadFile(event){
      var files = event.target.files
      const file = files[0]
      this.file = file
      event.target.value = ''
    },
    //确认上传
    sureData(){
        const data = new FormData();
        data.append('file', this.file);
        this.$http.post("generateDoc",data,{
            headers: {
                'Content-Type': 'multipart/form-data',
            },
            responseType: 'blob',    // 表明服务器返回的数据类型
        })
        .then((res) => {
            this.$message({
              message: '转化成功',
              type: 'success'
            });
            //创建一个隐藏的a连接,
            const link = document.createElement('a');
            let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'});
            link.style.display = 'none';
            //设置连接
            link.href = URL.createObjectURL(blob);
            link.download = this.file.name; 
            document.body.appendChild(link);
            //模拟点击事件
            link.click();
         }).catch((err)=>{
              console.log(err);
          });  
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值