vue+element 通过post方法实现blob文件流下载

 handleUp(file, fileList) {
      if (this.excel1 == "" || this.excel2 == "") {
        this.$alert(
          "x x x文件与x x x文件表必须上传",
          "警告",
          {
            confirmButtonText: "确定",
            callback: (action) => {
              this.$message({
                type: "info",
                message: `上传失败!`,
              });
              return;
            }
          }
        )
        return
      }
      var param = new FormData();
      var config = {
              headers: {'Content-Type': 'multipart/form-data'},
              responseType: "blob"
        }
      param.append("excel1", this.excel1);
      param.append("excel2", this.excel2); 
      this.excel3.forEach((file) => {
        param.append("excel3", file);
        });
      axios
        .post("url", param,config) //由于只通过post方法实现文件下载,因此需要配置文件头
        .then((res) => {
          console.log(res);
          //当文件上传不符合后端文件需求,后端返回相关参数供前端解析,以下的操作是跟后端协商
          if(res.headers.responsestatus == "False"){
            this.$alert(
          `${decodeURI(res.headers.responsemessage)}`,
          "警告",
          {
            confirmButtonText: "确定",
          }
        )     
        this.$refs.bugetupload.clearFiles()
        this.$refs.claimupload.clearFiles()
        this.$refs.file3upload.clearFiles()
        return 
        }
          const blob = new Blob([res.data],{type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})
          //兼容性处理
          let urlObject = window.URL||window.webkitURL||window;
          let url = urlObject.createObjectURL(blob);
          //增加a元素
          const downloadEle = document.createElement('a');
          //给a元素添加href属性,实现文件下载
          downloadEle.href = url;
          //下载的文件名命名
          downloadEle.download = decodeURI(res.headers.filename)  //解析后端返回来的文件名
          //a元素绑定单击事件
          downloadEle.click();
          //下载完成清空url
          urlObject.revokeObjectURL(url);
          //以下是实现上传文件成功后,清空文件
          this.$refs.bugetupload.clearFiles()
          this.$refs.claimupload.clearFiles()
          this.$refs.file3upload.clearFiles()
        })
        .catch((err) => {
          console.log(err);
        });
    },

创作不易,如有需要转载麻烦标注下地址,欢迎各位讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值