前端文件流下载处理

在这里插入图片描述

一,直接使用

 download() {
      const link = document.createElement("a");
      link.style.display = "none";
      //请求后台的具体地址
      link.href ="http://192.168.5.69:8000/api1/cardGiveBatchEntity/account/template/download";
      link.setAttribute("download", "文件名称.xlsx");
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
      }

二,线上pdf链接下载

  downTicket() {
            let url = url 
            if (!url) return 
            //  获取文件名
            let fileName = this.urlFile(url, 1);
            //  获取文件后缀
            let fileExtension = this.urlFile(url, 2);
            let xhr = new XMLHttpRequest();
            xhr.open('get', url, true);
            xhr.setRequestHeader('Content-Type', `application/${fileExtension}`);
            xhr.responseType = "blob";
            xhr.onload = function () {
                if (this.status == 200) {
                    //接受二进制文件流
                    console.log(this)
                    var blob = this.response;
                    const blobUrl = window.URL.createObjectURL(blob);
                    // 这里的文件名根据实际情况从响应头或者url里获取
                    const a = document.createElement('a');
                    a.href = blobUrl;
                    a.download = fileName;
                    a.click();
                    window.URL.revokeObjectURL(blobUrl);
                }
            }
            xhr.send();
        },
        urlFile(url, type) {
            let filename = url.substring(url.lastIndexOf('/') + 1)
            switch (type) {
                case 1: return filename; break;
                case 2: return filename.substring(filename.lastIndexOf(".") + 1); break;
                case 3: return filename.substring(0, filename.lastIndexOf(".")); break;
                case 4: return url.substring(0, url.lastIndexOf('/') + 1)
            }
        },

三,vue中使用文件流进行下载(new Blob)

get请求获取

  axios({
        url: "/cardGiveBatchEntity/account/template/download",
        method: "get",
        //vue axios(下载文件流)设置返回值类型responseType:‘blob‘
        responseType: "blob", 
      })
        .then((res) => {
          console.log(res);
          //解析文件充blod中解析
          const url = window.URL.createObjectURL(
            new Blob([res.data], { type: "application/vnd.ms-excel" })
          );
          const link = document.createElement("a");
          link.style.display = "none";
          link.href = url;
          link.setAttribute("download", "文件名称.xlsx");
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        })
        .catch((err) => {
          console.log(err);
        });

由于get可以如此用,

var params={ XX:xx, }
this.$axios.get('/XXX/XXX',{
    params: params,
    responseType: 'blob'
}).then(res => {
    console.log(res);
});

若是封装的话则使用:
在这里插入图片描述

post请求获取

   axios
          .post("/cardGiveBatchEntity/account/template/download", "", {
            headers: {},
            responseType: "blob",
          })
          .then((res) => {
            console.log(res);
            const url = window.URL.createObjectURL(
              new Blob([res.data], { type: "application/vnd.ms-excel" })
            );
            const link = document.createElement("a");
            link.style.display = "none";
            link.href = url;
            link.setAttribute("download", "文件名称.xlsx");
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
          })
          .catch((err) => {
            console.log(err);
          });

post封装的操作:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值