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 相关文章推荐
清除网页历史记录,屏蔽后退按钮!
Dec 22 Javascript
jQuery中jqGrid分页实现代码
Nov 04 Javascript
javascript动态控制服务器控件实例
Sep 05 Javascript
javascript制作网页图片上实现下雨效果
Feb 26 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
微信小程序movable view移动图片和双指缩放实例代码
Aug 08 Javascript
Vue前后端不同端口的实现方法
Sep 19 Javascript
JS数组实现分类统计实例代码
Sep 30 Javascript
前端面试知识点目录一览
Apr 15 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 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教程 预定义变量
2009/10/23 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP安全配置详细说明
2011/09/26 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP中的类型约束介绍
2015/05/11 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue刷新和tab切换实例
2018/02/11 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
python 数据加密代码
2008/12/24 Python
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
建材业务员岗位职责
2013/12/08 职场文书
教师党性分析材料
2014/02/04 职场文书
初中差生评语
2014/12/29 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP