Vue项目利用axios请求接口下载excel


Posted in Vue.js onNovember 17, 2020

本文实例为大家分享了Vue项目利用axios请求接口下载excel的具体代码,供大家参考,具体内容如下

据我了解的前端的下载方式有三种,第一种是通过a标签来进行下载,第二种时候通过window.location来下载,第三种是通过请求后台的接口来下载,今天就来记录一下这三种下载方式。

方法一:通过a标签

// href为文件的存储路径或者地址,download为问文件名
<a href="/images/logo.jpg" rel="external nofollow" download="logo" />

优点:简单方便。
缺点:这种下载方式只支持Firefox和Chrome不支持IE和Safari,兼容性不够好。

方法二:通过window.location

window.location = 'http://127.0.0.1:8080/api/download?name=xxx&type=xxx'

优点:简单方便。
缺点:只能进行get请求,当有token校验的时候不方便。

方法三:通过请求后台接口

// download.js
import axios from 'axios'

export function download(type, name) {
 axios({
 method: 'post',
 url: 'http://127.0.0.1:8080/api/download',
 // headers里面设置token
 headers: {
 loginCode: 'xxx',
 authorization: 'xxx'
 },
 data: {
 name: name,
 type: type
 },
 // 二进制流文件,一定要设置成blob,默认是json
 responseType: 'blob'
 }).then(res => {
 const link = document.createElement('a')
 const blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
 link.style.display = 'none'
 link.href = URL.createObjectURL(blob)
 link.setAttribute('download', `${name}.xlsx`)
 document.body.appendChild(link)
 link.click()
 document.body.removeChild(link)
 })
}
// download.java
@RequestMapping(value = "/api/download",produces = "application/octet-stream", method = RequestMethod.POST)
public void downloadTemplate(@RequestBody Map<String,Object> paramsMap, HttpServletResponse response) {
 try {
 if (paramsMap.get("type").equals("xxx") && paramsMap.get("name").equals("xxx")) {
 String[] str = new String[]{"区县","所属省份","所属地市"};
 Workbook workbook = ExportExcel.exportExcel("行政区划表模版", str, null, "yyyy-MM-dd");
 download(response, workbook, "CityDict");
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
}

private void download(HttpServletResponse response, Workbook workbook, String fileName) {
 try {
 response.setContentType("application/octet-stream;charset=UTF-8;");
 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".xlsx");
 ByteArrayOutputStream by = new ByteArrayOutputStream();
 OutputStream osOut = response.getOutputStream();
 // 将指定的字节写入此输出流
 workbook.write(osOut);
 // 刷新此输出流并强制将所有缓冲的输出字节被写出
 osOut.flush();
 // 关闭流
 osOut.close();
 } catch (IOException e) {
 LogUtils.getExceptionLogger().info("下载模板错误:{}", e.getMessage());
 }
}

优点:可以在headers里面设置token,文件是java代码中生成的,生成的文件比较灵活。
缺点:实现起来比较复杂。

关于vue.js的学习教程,请大家点击专题vue.js组件学习教程、Vue.js前端组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
Vue如何实现组件间通信
May 15 Vue.js
vue 给数组添加新对象并赋值
Apr 20 Vue.js
Vue2项目中对百度地图的封装使用详解
Jun 16 Vue.js
vue实现下载文件流完整前后端代码
Nov 17 #Vue.js
vue+iview实现文件上传
Nov 17 #Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 #Vue.js
vue+iview实现分页及查询功能
Nov 17 #Vue.js
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 #Vue.js
vue+iview分页组件的封装
Nov 17 #Vue.js
在vue中通过render函数给子组件设置ref操作
Nov 17 #Vue.js
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
CI框架附属类用法分析
2018/12/26 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
JS编程小常识很有用
2012/11/26 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
js使用递归解析xml
2014/12/12 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jquery使用经验小结
2015/05/20 Javascript
浅谈window对象的scrollBy()方法
2015/07/15 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
机关出纳岗位职责
2014/04/03 职场文书
小区文明倡议书
2014/05/16 职场文书
企业环保标语
2014/06/10 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
淘宝好评语句大全
2014/12/31 职场文书
颐和园的导游词
2015/01/30 职场文书
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android