vue.js 使用axios实现下载功能
本文主要来源于知乎一个回答,这里红色部分做了自己的处理,虽然自己的少,可是很有用的几句代码哦
只好回答一下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 = urliframe.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)res.data='';res.headers['content-type'] = 'text/json'return res;}...return res;
}, error => {// Do something with response errorreturn Promise.reject(error.response.data || error.message)
})
export default axios
之后我们就可以通过axios中的get请求下载文件了。
结束
主要代码来自:https://www.zhihu.com/question/263323250/answer/267842980
另一种方法
由于兼容性等问题,其实导出直接用链接更方便一些,兼容性也好,参数不是很多的话放在请求路径后面也是ok的,具体如下:
//导出exportOrderList() {this.formItem.token = Cookies.get('token');let param = "";for(let field in this.formItem) {if(this.formItem[field]) {param += field + "=" + this.formItem[field] + "&";}}param = param.substring(0, param.length-1);let url = "api/queryListExport?" + param;window.location.href = url;},
关键就是这句哦:
window.location.href = url;
这样也不需要像上面加拦截器什么的了哦,方便好用
---------------------
原文:https://blog.csdn.net/seanxwq/article/details/78975661
vue.js 使用axios实现下载功能相关推荐
- html鼠标悬浮更换图片,Vue.js鼠标悬浮更换图片功能
最近自己做的项目中设计师要求分类栏中鼠标悬停更换图片,大致实现出来的效果就是这样: 这个在jQuery中是个很简单的事,但是在vue中我还是第一次实现. 首先将所有的选中后图片都覆盖到没选中图片上 c ...
- vue 仿日历格式对账单下载功能
本次主要是使用vue+element UI来完成对账单功能的实现,需求是当前时间及之前一天不可点击,大于当前日期置灰不可点击. 模板简陋敬请谅解 - 先上效果图 vue 页面布局方便数据渲染 < ...
- vue.js实现带表情评论功能前后端实现(仿B站评论)
文章目录 学习链接 效果图 后台 建表 评论表(重要) 用户表 实体类 Comment User CommentDTO(重要) WebConfig配置 配置跨域和静态资源文件夹 Mybatisplus ...
- vue.js中文官网下载vue.js失败了?
访问vue官网 https://v2.cn.vuejs.org/v2/guide/installation.html下载vue.js,页面直接报错404,只需要切换到英文版,重新下载即可成功. 或者直 ...
- vue根据url获取内容axios_使用Vue.js和Axios从第三方API获取数据 — SitePoint
更多的往往不是,建立你的JavaScript应用程序时,你会想把数据从远程源或消耗一个[ API ](https:/ /恩.维基百科.org /维基/ application_programming_ ...
- 前端vue不经过后台实现下载功能本地打印出现报错跨域问题
这段时间有个项目对接法院的项目,主要是内网实现笔录的一个下载打印的问题,主要来说一下打印和下载遇到的坑的问题.首先是打印的 问题,这边就是需求就是根据html的东西完了点击打印直接下载为docx的wo ...
- VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法...
data里面做了定义 在方法里面进行赋值 用 this.info = repos.data 数据可以请求到,但是会报错 TypeError: Cannot set property 'listgrou ...
- vue实现表格的‘模板下载‘功能
样式: 实现点击'模板下载'按钮,下载下方表格模板 css代码: <el-button type="text" class="marginL5" @cli ...
- vue/js实现文件流下载,文件下载进度监听
/*** 文档下载(通过文档请求,直接下载文档)* url 请求路径* fileName 下载名称* size 文件大小*/loadDown (url, fileName, size) {var _t ...
最新文章
- Spring容器装饰者模式应用之实现业务类与服务类自由组合的解决方式
- sql判断null/空缺值
- [原]好玩的Linux,关于时间cal命令
- pytorch学习笔记(三十五):Momentum
- linux消息队列总结
- php可以在dw中吗,php新手求助,为什么在DW中设计里能看到运行php程序的结果,但…...
- p2371bzoj2118 墨墨的等式
- 天翼对讲机写频软件_对讲机常见问题解决方法
- 磁力云播Android代码,磁力云播
- potainer 日志_分享10个优秀的日志分析工具
- 2014年5月份第1周51Aspx源码发布详情
- 如何将Python打包后的exe还原成.py?
- python搭建 ADLINE 网络判断男女
- 计算机碎片整理,计算机磁盘碎片整理
- BI神器Power Query(22)-- 同一列内多重替换(2)
- matlab非平稳信号小波和FFT去噪
- Dots初探和原理分析
- android list sort 并删除重复点_阿博的Python之路-详解List数据类型
- 安装升级Exchange Server 2010 SP1补丁
- predis操作redis方法大全
热门文章
- lora网关软件设计_SX1301网关设计 LoRaWAN网关 评估开发套件sx1278双向测试云平台LPKT001...
- r语言 线性回归 相关系数_基于R语言的lmer混合线性回归模型
- 执行远程服务器上的脚本失败?(环境变量引起的问题)
- 汇编语言中常用指令对标志位寄存器的影响
- LeetCode 135 分发糖果
- 面试题06. 从尾到头打印链表
- VS设置程序启动权限为管理员权限
- JS 查看标签下某元素所有信息(查看元素,查询元素,遍历元素、HTMLCollection对象、NodeList对象)
- mysql数据库遍历表,其一字段获取上一条数据
- 循环链表:拉丁方阵问题