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.js的Ajax对象
Sep 23 Javascript
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
jquery退出each循环的写法
Feb 26 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
Jul 09 Javascript
有关文件上传 非ajax提交 得到后台数据问题
Oct 12 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
JS实现给对象动态添加属性的方法
Jan 05 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
Vue中$refs的用法详解
Jun 24 Javascript
Ant Design moment对象和字符串之间的相互转化教程
Oct 27 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 实例化类的一点摘记
2008/03/23 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
javascript 伪数组实现方法
2010/10/11 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
百度地图api如何使用
2015/08/03 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
Python 详解基本语法_函数_返回值
2017/01/22 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Pyqt5实现英文学习词典
2019/06/24 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
python画微信表情符的实例代码
2019/10/09 Python
python的faker库用法
2019/11/28 Python
大学毕业生自我鉴定
2013/11/05 职场文书
股权转让协议书范本
2014/04/12 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
标准发言稿结尾
2019/07/18 职场文书
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python