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中判断函数是new还是()调用的区别说明
Apr 07 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
查看大图功能代码jquery版
Nov 05 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
jQuery实现图片上传和裁剪插件Croppie
Nov 29 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
微信小程序 select 下拉框组件功能
Sep 09 Javascript
Node.js创建一个Express服务的方法详解
Jan 06 Javascript
阿望教你用vue写扫雷小游戏
Jan 20 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
May 01 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通过header实现文本文件下载的代码
2010/08/08 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
php设计模式之委托模式
2016/02/13 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
详解Yii2.0使用AR联表查询实例
2017/06/16 PHP
jQuery extend 的简单实例
2013/09/18 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
js验证账户名是否重复
2020/05/26 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
详解Vue的七种传值方式
2021/02/08 Vue.js
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
python版本的读写锁操作方法
2016/04/25 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
用python发送微信消息
2020/12/21 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
什么是抽象
2015/12/13 面试题
团委竞选演讲稿
2014/04/24 职场文书
小学学校评估方案
2014/06/08 职场文书
学困生转化工作总结
2015/08/13 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
js作用域及作用域链工作引擎
2022/07/07 Javascript
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers