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 相关文章推荐
prototype1.4中文手册
Sep 22 Javascript
JS日历 推荐
Dec 03 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
Jan 16 Javascript
jQuery用noConflict代替$的实现方法
Apr 12 jQuery
JavaScript数据结构之双向链表定义与使用方法示例
Oct 27 Javascript
如何编写一个完整的Angular4 FormText 组件
Nov 18 Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 jQuery
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 Javascript
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
JavaScript实现登录窗体
Jun 22 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
快速解决安装python没有scripts文件夹的问题
2018/04/03 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
自考生自我评价分享
2014/01/18 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2014年医生工作总结
2014/11/21 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
复试通知单模板
2015/04/24 职场文书