axios实现下载文件

1、axios请求文件流

import axios from ‘axios‘

export const downLoadfile = (id)=> {
    return axios({
      url: window.localStorage.url + `/base/report/download/report?id=${id}`,
      method: ‘get‘,
      headers: {
        "token": ‘这里是你的token‘
      },
      responseType: ‘blob‘
    })
  }

2、获取文件后创建下载对象

/**
**res是文件流
**/
export function exportExcleUtil(res) {
    const fileName = res.headers["content-disposition"].split("=")[1];
    const blob = new Blob([res.data], {
        type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
    });
    const url = window.URL.createObjectURL(blob);
    const aLink = document.createElement("a");
    aLink.style.display = "none";
    aLink.href = url;
    aLink.setAttribute("download", decodeURI(fileName));
    document.body.appendChild(aLink);
    aLink.click();
    document.body.removeChild(aLink); //下载完成移除元素
    window.URL.revokeObjectURL(url); //释放掉blob对象
}

3、如果获取不到响应头中的Content-Disposition怎么解决?
有时候请求完文件流需要获取到响应头中的Content-Disposition来设置文件名称,但可能在network中能看到该属性,却不能获取到改属性。
axios实现下载文件
根据MDN文档:Access-Control-Expose-Headers,默认情况下,header只有六种 simple response headers (简单响应首部)可以暴露给外部:

Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma

这里的暴露给外部,意思是让客户端可以访问得到,既可以在Network里看到,也可以在代码里获取到他们的值。因此服务器在协议回包里需要加上该字段,并且在响应首部 Access-Control-Expose-Headers将其暴露出来,以供客户端获取。如下图所示

axios实现下载文件

axios实现下载文件

上一篇:Photoshop 淡绿色的古典婚片处理方法


下一篇:利用CSS3实现立方体及移动组装效果