您当前的位置: 首页 >  ios

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JS:Axios文件下载

彭世瑜 发布时间:2020-12-18 16:10:02 ,浏览量:0

本例使用vue做前端项目 和 express做后端服务

axios的config参数 responseType: 'blob' ,很多地方都提到需要设置,我没有设置也能正常下载

依赖

  • concurrently 插件来运行命令
  • nodemon 监控重启 node 后台
  • cors 处理跨域
a标签下载文件
download(){
    let href  = "http://localhost:8080/download";
    const dom = document.createElement('a');
    dom.style.display = 'none';
    dom.href = href;
    document.body.appendChild(dom);
    //点击下载
    dom.click();
    //下载完成移除元素
    document.body.removeChild(dom);
},
axios下载
async downloadFile(){
    const res = await axios.get("http://localhost:8080/file");

    console.log(res);

    const blob = new Blob([res.data], {type: res.headers['content-type']});
    let patt = new RegExp("filename=([^;]+\\.[^\\.;]+);*");
    let result = patt.exec(res.headers['content-disposition']);
    let filename = decodeURI(result[1]);

    const downloadElement = document.createElement('a');
    const href = window.URL.createObjectURL(blob);

    console.log(filename);
    downloadElement.style.display = 'none';
    downloadElement.href = href;
    downloadElement.download = filename ; //下载后文件名
    document.body.appendChild(downloadElement);
    downloadElement.click(); //点击下载
    document.body.removeChild(downloadElement); //下载完成移除元素
    window.URL.revokeObjectURL(href); //释放掉blob对象
}

后端服务需要做一些特殊设置

// 设置的文件名,需要对 filename 进行转码,防止下载的文件名中有中文时出现乱码。
res.setHeader("Content-Disposition", "attachment; filename=" + encodeURI(filename));
res.setHeader("Content-Type", 'application/octet-stream');
// axios下载文件取不到content-disposition需要添加响应头
res.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
下载图片

可以直接用img标签加链接就可以显示


代码文件:https://github.com/mouday/Vue-Demo/tree/main/vue-axios

参考 使用axios如何下载文件 https://blog.csdn.net/shuangmu9768/article/details/108846417

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.0564s