实现导出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的更多相关文章

  1. asp.net导出excel并弹出保存提示框

    asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1  转:78   |  分享  腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报          ...

  2. JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框

    导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行. poi包我是用:poi-3.11-20141221.jar 亲测有效: 效果: Action 类代码: private I ...

  3. js在关闭页面前弹出确认提示【转载】

    最近项目中出现个bug,就是导出数据后,会提示确认导航,其实实际需求并不需要这个提示,可能是之前遗留的问题.查了下资料是在触发了onbeforeunload事件,那么剩下的就是代码组织问题了. 众所周 ...

  4. [UWP]在应用退出时弹出确认提示框

    1. 需求 在应用退出时(点击右上角的关闭按钮)弹出一个确认按钮可以说是一个最常见的操作了,例如记事本的"你是否保存": 但这个功能在UWP上居然有点小复杂.这篇文章将解释如何实现 ...

  5. CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口

    上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...

  6. 弹出JS提示框

    弹出JS提示框Page.ClientScript.RegisterStartupScript(typeof(string), "msg", "<script> ...

  7. INNO:检测程序是否已经安装,是则弹出卸载提示。

    INNO:检测程序是否已经安装,是则弹出卸载提示. 作者:少轻狂 | 发布:2010-08-05 | 更新:2013-09-05 | 分类:部署 | Disposition | 热度:2816 ℃ 实 ...

  8. Asp.Net下载页面,并弹出下载提示框

    Asp.Net下载页面,并弹出下载提示框.在删除按钮里调用以下方法.

  9. 解决PL/SQL Dev连接Oracle弹出空白提示框

    第一次安装Oracle,装在虚拟机中,用PL/SQL Dev连接远程数据库的时候老是弹出空白提示框,网上找了很久,解决方法也很多,可是就是没法解决我这种情况的. 没办法,只能自己研究,经过大概一天时间 ...

随机推荐

  1. mysql数据库之事务与存储过程

    事务 什么是事务? 事务是指一些SQL语句的集合,这些语句同时执行成功完成某项功能 事务的CAID特性: 原子性:一个事务的执行是整体性的,要么内部所有语句都执行成功,要么一个都别想成功 一致性:事务 ...

  2. linux下nginx的学习

    安装参考菜鸟教程:https://www.runoob.com/linux/nginx-install-setup.html nginx文档官网: http://nginx.org nginx社区:h ...

  3. ZOJ Problem Set - 1008

    1.翻译及思路 http://blog.csdn.net/dapengbusi/article/details/7313785 http://acm.sdut.edu.cn/bbs/read.php? ...

  4. [转帖]12条用于Linux的MySQL/MariaDB安全最佳实践

    12条用于Linux的MySQL/MariaDB安全最佳实践 2018-01-04 11:05:56作者:凉凉_,soaring稿源:开源中国社区 https://ywnz.com/linuxysjk ...

  5. 南昌网络赛C.Angry FFF Party

    南昌网络赛C.Angry FFF Party Describe In ACM labs, there are only few members who have girlfriends. And th ...

  6. 剑指offer5:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    1. 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 2. 思想 (1)栈的特点是先进后出,而队列的特点是先进先出: (2)因此,入队列的情况和入栈的情 ...

  7. Python面试常考点之深入浅出链表操作

    Python面试常考点之深入浅出链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对 ...

  8. Ruby Rails学习中:登陆

    登陆 一. Sessions 控制器 登录和退出功能由 Sessions 控制器中相应的 REST 动作处理 : 登录表单在 new 动作中处理, 登录的过程是向 create 动作发送 POST 请 ...

  9. IDEA将项目打包为指定class文件的jar

    转自:https://blog.csdn.net/makang456/article/details/86699375 [背景]     公司最近要和某大公司合作,将本公司的产品提供给其它公司单独部署 ...

  10. 深入理解hive(1)

    1.安装和配置: 1.1可以通过这个下载链接去下载hive源码来安装一个一个稳定版本的hive.https://cwiki.apache.org/confluence/display/Hive/Get ...