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 相关文章推荐
Tips 带三角可关闭的文字提示
Oct 06 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
Sep 16 Javascript
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
jQuery中odd选择器的定义和用法
Dec 23 Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
Oct 30 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
JS实现颜色的10进制转化成rgba格式的方法
Sep 04 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
webpack的pitching loader详解
Sep 23 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
php格式文件打开的四种方法
2018/02/24 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
Exjs 入门篇
2010/04/07 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
跟老齐学Python之一个免费的实验室
2014/09/14 Python
python计算N天之后日期的方法
2015/03/31 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python 变量类型详解
2018/10/10 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
深入了解NumPy 高级索引
2020/07/24 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
Python LMDB库的使用示例
2021/02/14 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
总会计师岗位职责
2014/02/19 职场文书
骨干教师考核方案
2014/05/09 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
Python函数对象与闭包函数
2022/04/13 Python
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS