JS:Axios文件下载

简介: JS:Axios文件下载

本例使用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标签加链接就可以显示

<img v-if="imageSrc" :src="imageSrc" alt="">
• 1

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

参考

使用axios如何下载文件

https://blog.csdn.net/shuangmu9768/article/details/108846417

相关文章
|
7月前
|
机器学习/深度学习 前端开发 JavaScript
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
147 0
源映射错误:Error: request failed with status 404 源 URL:http://localhost:8080/bootstrap/js/axios-0.18.0.js
|
7月前
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
报错/ ./node_modules/axios/lib/platform/index.js Module parse failed: Unexpected token (5:2)怎么解决?
|
5月前
|
NoSQL 前端开发 测试技术
若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
|
5月前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
JavaScript 前端开发 数据库
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)-3
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)
108 0
|
7月前
|
数据采集 JavaScript 前端开发
利用axios库在Node.js中进行代理请求的实践
利用axios库在Node.js中进行代理请求的实践
|
JavaScript 前端开发
使用axios取消请求 - 原生JavaScript
有时候数据有限,过多的请求也只是返回空,那不如直接中断请求呢! 然后由于vue官方和axios梦幻联动,总是搜到关于vue的,所以再此之外的挺少,我就不客气地再发一次了 @(滑稽)
47 0
|
存储 JavaScript 前端开发
Vue.js 中使用 axios 遍历两个数组的问题及解决方案
axios异步调用两个方法并把两个方法同时遍历到页面中 第一个方法:调用出bookid,装到bArray数组中 第二个方法:根据第一个方法调用出来的所有bookid依次调用对应的title(书名),并把所有书名依次装入bArray数组中。
92 0
|
Web App开发 JavaScript 前端开发
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)-2
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)
81 0
|
存储 JavaScript 前端开发
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)-1
前端常见知识点汇总(ES6,Vue,axios,Node.js,npm,webpack)
84 0