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 相关文章推荐
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
jquery设置控件位置的方法
Aug 21 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
浅谈setTimeout 与 setInterval
Jun 23 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
Apr 23 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
js实现幻灯片轮播图
Aug 14 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
js实现3D旋转效果
2020/08/18 Javascript
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python SocketServer源码深入解读
2019/09/17 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
JAVA中运算符的分类及举例
2015/09/12 面试题
个人简历的自荐信
2013/10/23 职场文书
公务员的自我鉴定
2013/10/26 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
学生党员公开承诺书
2014/05/28 职场文书
销售口号大全
2014/06/11 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
公司搬迁通知
2015/04/20 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
python语言中pandas字符串分割str.split()函数
2022/08/05 Python