vue.js 使用axios实现下载功能的示例


Posted in Javascript onMarch 05, 2018

本文主要来源于知乎一个回答,这里红色部分做了自己的处理,虽然自己的少,可是很有用的几句代码哦

只好回答一下axios如何拦截get请求并下载文件的了。

Ajax无法下载文件的原因

浏览器的GET(frame、a)和POST(form)请求具有如下特点:

response会交由浏览器处理

response内容可以为二进制文件、字符串等

Ajax请求具有如下特点:

response会交由Javascript处理

response内容仅可以为字符串

因此,Ajax本身无法触发浏览器的下载功能。

Axios拦截请求并实现下载

为了下载文件,我们通常会采用以下步骤:

发送请求

获得response

通过response判断返回是否为文件

如果是文件则在页面中插入frame

利用frame实现浏览器的get下载

我们可以为axios添加一个拦截器:

import axios from 'axios'
// download url
const downloadUrl = url => {
 let iframe = document.createElement('iframe')
 iframe.style.display = 'none'
 iframe.src = url
 iframe.onload = function () {
 document.body.removeChild(iframe)
 }
 document.body.appendChild(iframe)
}
// Add a response interceptor
axios.interceptors.response.use(c=> {
 // 处理excel文件
 if (res.headers && (res.headers['content-type'] === 'application/x-msdownload' || res.headers['content-type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')) {
 downloadUrl(res.request.responseURL)
 
 <span style="color:#ff0000;"> res.data='';
 res.headers['content-type'] = 'text/json'
 return res;</span>
 }
 ...
 return res;
}, error => {
 <span style="color:#ff0000;">// Do something with response error
 return Promise.reject(error.response.data || error.message)</span>
})
export default axios

之后我们就可以通过axios中的get请求下载文件了。

以上这篇vue.js 使用axios实现下载功能的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中万恶的function实例分析
May 25 Javascript
原生js实现半透明遮罩层效果具体代码
Jun 06 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
可自己添加html的伪弹出框实现代码
Sep 08 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
基于javascript html5实现多文件上传
Mar 03 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
详解js加减乘除精确计算
Mar 19 Javascript
详解vue开发中调用微信jssdk的问题
Apr 16 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 #Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 #Javascript
vue项目中引入noVNC远程桌面的方法
Mar 05 #Javascript
vue项目中使用ueditor的实例讲解
Mar 05 #Javascript
快速处理vue渲染前的显示问题
Mar 05 #Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 #Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 #Javascript
You might like
网站用php实现paypal整合方法
2010/11/28 PHP
php使用codebase生成随机数
2014/03/25 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
javascript操作css属性
2013/12/30 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
python通过socket查询whois的方法
2015/07/18 Python
探究python中open函数的使用
2016/03/01 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
美术兴趣小组活动总结
2014/07/07 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
小学运动会开幕词
2016/03/04 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Java8中Stream的一些神操作
2021/11/02 Java/Android
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript