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 高效运行代码分析
Mar 18 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
JavaScript变量的作用域全解析
Aug 14 Javascript
javascript基本算法汇总
Mar 09 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
Apr 14 Javascript
Vue异步组件使用详解
Apr 08 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
如何利用JavaScript编写一个格斗小游戏
Jan 06 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设计模式之迭代器模式的深入解析
2013/06/13 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
动手学习无线电
2021/03/10 无线电
一种JavaScript的设计模式
2006/11/22 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
2017/03/02 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
利用python实现数据分析
2017/01/11 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Keras在训练期间可视化训练误差和测试误差实例
2020/06/16 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
最新会计专业求职信范文
2014/01/28 职场文书
成绩报告单家长评语
2014/12/30 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
大学生创业计划书
2019/06/24 职场文书