当前位置: 移动技术网 > IT编程>脚本编程>vue.js > vue.js 使用axios实现下载功能的示例

vue.js 使用axios实现下载功能的示例

2018年03月08日  | 移动技术网IT编程  | 我要评论

盘古弟子逍遥录,红旗连锁积分查询,情侣头像闪图

本文主要来源于知乎一个回答,这里红色部分做了自己的处理,虽然自己的少,可是很有用的几句代码哦

只好回答一下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实现下载功能的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网