axios关于后端返回二进制xlsx,xls等数据的处理

968 阅读1分钟
  1. 后端返回文件流的是一大串看不懂的xxxxxxx
  2. 我们需要在请求头加 responseType: 'blob'即可,这样返回的就可以通过a标签下载了

这里考虑的下载需要文件名,返回结果没办法取名称,所以通过响应头返回,上面通过响应头获取字段(可能出现编码不对乱码情况)

需要后台在响应头放开你想要获取的字段名,Access-Control-Expose-Headers : 'fileName'

      axios({
        method: 'post',
        url: '/user/12345',
        data: {
          firstName: 'Fred',
          lastName: 'Flintstone'
        },
        // 文件流
        responseType: 'blob'
      }).then(res => {
        // 取出响应头
        const { headers, data } = res;
        const url = URL.createObjectURL(data);
        const a = document.createElement("a");
        a.setAttribute("href", url);
        // 这里我定义了响应头名称为filename
        a.download = headers.filename;
        document.body.appendChild(a);
        a.click();
        a.remove();
        URL.revokeObjectURL(url);
      })