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 相关文章推荐
Prototype Hash对象 学习
Jul 19 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
jquery、js操作checkbox全选反选
Mar 12 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
vue-cli 打包使用history模式的后端配置实例
Sep 20 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
Jul 17 Javascript
jQuery插件实现图片轮播效果
Oct 19 jQuery
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开发微信支付的代码分享
2014/05/25 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
js实现随机抽奖
2020/03/19 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
亲子读书活动方案
2014/02/22 职场文书
眼镜促销方案
2014/03/15 职场文书
小摄影师教学反思
2014/04/27 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
2014乡镇党委副书记对照检查材料思想汇报
2014/10/09 职场文书
2014年应急工作总结
2014/12/11 职场文书
社区工作者个人总结
2015/02/28 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers