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 相关文章推荐
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
Jan 25 Javascript
js运动框架_包括图片的淡入淡出效果
May 11 Javascript
Javascript浅谈之this
Dec 17 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
Mar 21 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 Javascript
vue抽出组件并传值实例
Jul 31 Javascript
JavaScript实现复选框全选和取消全选
Nov 20 Javascript
JavaScript用document.write()输出换行的示例代码
Nov 26 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
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使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
PHP echo()函数讲解
2019/02/15 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
使用jQuery处理AJAX请求的基础学习教程
2016/05/10 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
2017/02/28 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
JS中数据结构之栈
2019/01/01 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
Python functools模块学习总结
2015/05/09 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
2014年卫生工作总结
2014/11/27 职场文书
六一亲子活动感想
2015/08/07 职场文书
生日寿星公答谢词
2015/09/29 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
DSP接收机前端设想
2022/04/05 无线电
pt-archiver 主键自增
2022/04/26 MySQL