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实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
浏览器缩放检测的js代码
Sep 28 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
jquery使用经验小结
May 20 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
js实现简单排列组合的方法
Jan 27 Javascript
Javascript的this用法
Jan 16 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
vue操作动画的记录animate.css实例代码
Apr 26 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
Sep 03 Javascript
vue实现全匹配搜索列表内容
Sep 26 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
第十三节 对象串行化 [13]
2006/10/09 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
JS实现1000以内被3或5整除的数字之和
2016/02/18 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
原生Javascript插件开发实践
2017/01/09 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Django框架反向解析操作详解
2019/11/28 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Python3运算符常见用法分析
2020/02/14 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
如何获得EntityManager
2014/02/09 面试题
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
决定成败的关键——创业计划书
2014/01/24 职场文书
董事长助理岗位职责
2014/02/18 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
英语邀请函范文
2015/02/02 职场文书
郭明义观后感
2015/06/08 职场文书
污染环境建议书
2015/09/14 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
学习nginx基础知识
2021/09/04 Servers
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js