vue Excel导出 [post请求+提示语]
时间:2019-09-17
本文章向大家介绍vue Excel导出 [post请求+提示语],主要包括vue Excel导出 [post请求+提示语]使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一般我们实现excel导出都是直接重定向或form表单提交,但如果后台发生异常,提示信息就会在新窗口以文本形式展示,很不友好,这里推荐另一种实现方式,使用post请求,并可以传递自定义错误信息:
前端使用axios,responseType要设置为blob
let that= this
let params = { activitiesId: activitiesId, startTime: startTime, endTime: endTime } axios({ method: 'post', url: '/activityManage/exportExcel', data: params, responseType: 'blob' }).then(resp => { that.downloadFile(resp,that) }).catch(resp => { that.$notify.error(resp.msg || '导出失败') })
下载方法,实现方式为打开一个新链接,然后放置download按钮,并自动点击:
downloadFile (resp,that) { let data = resp.data // 此处提示自定义提示语,从header中获取 if(resp.headers['errormsg'] || !data){ that.$notify.error(decodeURI(resp.headers['errormsg'])||'导出失败') return } let url = window.URL.createObjectURL(new Blob([data])) let link = document.createElement('a') link.style.display = 'none' link.href = url // 文件名在后端设置 link.setAttribute('download', decodeURI(resp.headers['filename'])) document.body.appendChild(link) link.click() },
后台设置文件信息与文件名:
try { HSSFWorkbook hssfWorkbook = new HSSFWorkbook() String errorMsg = null; /** * 封装excel数据方法体,此处忽略,可自定百度poi * 根据需要自定义错误提示信息,最后放入header * errorMsg = "导出异常:活动不存在" */ String fileName = "excel导出数据"; //清空response response.reset(); //设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); //提示信息 response.setHeader("errorMsg", URLEncoder.encode(errorMsg, "utf-8")); response.setHeader("FileName", URLEncoder.encode(fileName, "utf-8")); response.setContentType("application/vnd.ms-excel;charset=gb2312"); OutputStream os = new BufferedOutputStream(response.getOutputStream()); hssfWorkbook.write(os); hssfWorkbook.close(); os.flush(); os.close(); } catch (Exception e) { log.error("导出分析数据异常:"+e); throw new RuntimeException(e); }
原文地址:https://www.cnblogs.com/nvsky/p/11532551.html
- Apache、struts1、struts2文件上传下载的3种方式
- 解析实时的DB time过程分析(r6笔记第35天)
- sql嵌入html格式显示报表(r6笔记第34天)
- hive计算日期差函数datediff,hive修改日期连接符
- 深度学习界的 “吃鸡挂”——目标检测 SSD 实验
- Hadoop查看所有JOB以及如何Kill指定用户的所有Job
- Java基础-23(01)总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- ORA-01427问题的分析和解决(r6笔记第51天)
- 从编程实现角度学习 Faster R-CNN(附极简实现)
- Java基础-23(02)总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- 8 个最好的 Java RESTful 框架
- 【C++基础】C++11 lambda 表达式解析
- 大量redo生成的问题原因及改进(r6笔记第50天)
- Java基础-22总结登录注册IO版,数据操作流,内存操作流,打印流,标准输入输出流,
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法