据我相识的前端的下载方法有三种,第一种是通过a标签来举办下载,第二种时辰通过window.location来下载,第三种是通过哀求靠山的接口来下载,本日就来记录一下这三种下载方法。
要领一: 通过a标签
// href为文件的存储路径可能地点,download为问文件名 <a href="http://www.admin5.com/images/logo.jpg" 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前端组件进修教程举办进修。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|