Vue框架下怎样用axios请求接口下载excel
Admin 2022-05-23 群英技术资讯 595 次浏览
本文实例为大家分享了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代码中生成的,生成的文件比较灵活。
缺点:实现起来比较复杂。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了解决elementui表格操作列自适应列宽,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要给大家分享的是JavaScript用html5新方法操作元素类名的详解,早先JavaScript处理起来特别不方便,需要先取到class属性,然后对字符串进行处理。现在html5给所有元素增加了classList属性来操作类属性,非常方便,下面就一起来看看具体操作过程吧
这篇文章给大家分享的是js 数组去重的方法,对于“数组去重”问题实际工作或面试中都是常遇到的,而实现数组去重的方法有很多,感兴趣的朋友就跟着小编一起来了解一下这11种js数组去重的方法吧。
Node.js的进程管理 node遵循的是单线程单进程的模式,node的单线程是指js的引擎只有一个实例,且在nodejs的主线程中执行,同时node以事件驱动的方式处理IO等异步操作。node的单线程模式,只维持一个主线程,大大减少了线程间切换的开销。 但是node的单线程使得在主线程不能进行CPU密集型操作,否则会阻塞主线程。对于CPU密集型操作,在node中通过child_proce
这篇文章主要给大家介绍了关于微信小程序获取手机号踩坑的相关资料,详细记录了踩坑的过程以及解决的方法和猜想,通过示例代码以及图片介绍的非常详细,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008