POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel
实现导出excel的思路是:前端通过ajax的post请求,到后台处理数据,然后把流文件响应到客户端,供客户端下载
文件下载方法如下:
- public static boolean downloadLocal(HttpServletRequest request,String filePath, String fileName, HttpServletResponse response) throws Exception {
- // 读到流中
- InputStream inStream = new FileInputStream(filePath);// 文件的存放路径
- // 设置输出的格式
- response.reset();//清除首部的空白行
- // 文件编码 处理文件名中的 '+'、' ' 特殊字符
- String encoderName = null;
- String userAgent = request.getHeader("USER-AGENT");
- if(userAgent != null && userAgent.toLowerCase().indexOf("firefox") > 0){
- encoderName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?=";
- }
- else {
- encoderName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20").replace("%2B", "+");
- }
- response.setHeader("Content-Disposition", "attachment;filename=\"" + encoderName + "\"");
- response.setContentType("application/octet-stream; charset=utf-8");
- response.setHeader("Accept-Ranges", "bytes");
- OutputStream ot = response.getOutputStream();
- // 循环取出流中的数据
- byte[] b = new byte[1024];
- int len;
- try {
- while ((len = inStream.read(b)) > 0)
- {
- ot.write(b, 0, len);
- }
- } catch (Exception e) {
- return false;
- }finally{
- if(ot!=null){
- ot.close();
- }
- if(inStream!=null){
- inStream.close();
- }
- }
- return true;
- }
但是一直没有弹出保存提示,查资料后知道:ajax异步请求,dataType格式只支持有xml,html,script,json,jsonp,text,不支持二进制流文件类型
解决方法:
前端改成使用form表单提交方式即可
修改前端代码如下:
- <body>
- ...
- <a class="mini-button mini-button-danger" onclick="exportCareerUnit()" >导出</a>
- ...
- ...
- <form id="careerForm" action="${path}/mvc/career/exportCareerUnitMsg" style="display: none" method="post" >
- <input id="careerSubForm" name="careerSubForm" />
- </form>
- </body>
- <script>
- function exportCareerUnit(){
- var o = {
- sys:sysParam
- };
- $("#careerSubForm").val("");
- var json = JSON.stringify(o);
- $("#careerSubForm").val(json);
- $("#careerForm").submit(); //表单提交
- }
- </script>
解决了问题!
后面看到另一篇文章:https://www.cnblogs.com/dingjiaoyang/p/5831049.html
“如果要将查询结果导出到Excel,只需将页面的Context-Type修改一下就可以了:header( "Content-Type: application/vnd.ms-excel">
如果希望能够提供那个打开/保存的对话框,设置Content-Disposition参数”
等忙过这阵,去试试~
POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel的更多相关文章
- asp.net导出excel并弹出保存提示框
asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1 转:78 | 分享 腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报 ...
- JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框
导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private I ...
- js在关闭页面前弹出确认提示【转载】
最近项目中出现个bug,就是导出数据后,会提示确认导航,其实实际需求并不需要这个提示,可能是之前遗留的问题.查了下资料是在触发了onbeforeunload事件,那么剩下的就是代码组织问题了. 众所周 ...
- [UWP]在应用退出时弹出确认提示框
1. 需求 在应用退出时(点击右上角的关闭按钮)弹出一个确认按钮可以说是一个最常见的操作了,例如记事本的"你是否保存": 但这个功能在UWP上居然有点小复杂.这篇文章将解释如何实现 ...
- CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口
上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...
- 弹出JS提示框
弹出JS提示框Page.ClientScript.RegisterStartupScript(typeof(string), "msg", "<script> ...
- INNO:检测程序是否已经安装,是则弹出卸载提示。
INNO:检测程序是否已经安装,是则弹出卸载提示. 作者:少轻狂 | 发布:2010-08-05 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:2816 ℃ 实 ...
- Asp.Net下载页面,并弹出下载提示框
Asp.Net下载页面,并弹出下载提示框.在删除按钮里调用以下方法.
- 解决PL/SQL Dev连接Oracle弹出空白提示框
第一次安装Oracle,装在虚拟机中,用PL/SQL Dev连接远程数据库的时候老是弹出空白提示框,网上找了很久,解决方法也很多,可是就是没法解决我这种情况的. 没办法,只能自己研究,经过大概一天时间 ...
随机推荐
- CSP 通信网络(201709-4)
问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只能单向传递信息,即一条从部门a到部门b的通路只能由a向b传递信息.信息可以通过中转的方式进行传递,即如果a能将信息 ...
- python虚拟环境的的使用
基于创建虚拟环境 virtualenv 安装 pip3 install virtualenv 通过virtulaenv创建虚拟环境 virtualenv luffycity --python=C:\P ...
- JSONObject 的使用
1. 导入依赖 这里以 20180813 的 json 版本为例 <dependency> <groupId>org.json</groupId> <arti ...
- 怎样创建并使用 vue 组件 (component) ?
组件化开发 需要使用到组件, 围绕组件, Vue 提供了一系列功能方法, 这里仅记录组件的 最简单 的使用方法. 1. 通过 Vue.component(tagName, options) 注册一个 ...
- Comparable内部比较器 和 Comparator外部比较器
1:Comparable a:基本数据类型封装类都继承了Comparable接口 b:TreeSet 和TreeMap集合默认是按照自然顺序排序的 c:继承类中实现compareTo()方法,在类内部 ...
- 【原创】大叔经验分享(60)hive和spark读取kudu表
从impala中创建kudu表之后,如果想从hive或spark sql直接读取,会报错: Caused by: java.lang.ClassNotFoundException: com.cloud ...
- Java设计模式只好
有时,一些学生私下问我:如何学习前端问题.这里有一个统一的回复,下次我遇到这个问题,同学们会直接给你发这篇文章的链接地址. “如何学习前端”应该因人而异,其他人的方法可能不适合自己.让我们谈谈我的学习 ...
- 1 c#传递表变量去存储数据的例子
1 c# 代码 using (SqlConnection con = GetEditorConnection()) { con.Open(); using (SqlCommand command = ...
- Python实现串口通信(pyserial)
pyserial模块封装了对串口的访问,兼容各种平台. 安装 pip insatll pyserial 初始化 简单初始化示例 import serial ser = serial.Serial('c ...
- LINUX中lrzsz软件的使用
安装lrzsz 可以在Linux 和 windows直接相互传文件 Linux无论ssh跳过去也可以sz rz打开图像进行传输文件 [root@master2 ~]# yum install lrzs ...