实现导出excel的思路是:前端通过ajax的post请求,到后台处理数据,然后把流文件响应到客户端,供客户端下载

文件下载方法如下:

  1. public static boolean downloadLocal(HttpServletRequest request,String filePath, String fileName, HttpServletResponse response) throws Exception {
  2. // 读到流中
  3. InputStream inStream = new FileInputStream(filePath);// 文件的存放路径
  4. // 设置输出的格式
  5. response.reset();//清除首部的空白行
  6. // 文件编码 处理文件名中的 '+'、' ' 特殊字符
  7. String encoderName = null;
  8. String userAgent = request.getHeader("USER-AGENT");
  9. if(userAgent != null && userAgent.toLowerCase().indexOf("firefox") > 0){
  10. encoderName = "=?UTF-8?B?" + (new String(Base64.encodeBase64(fileName.getBytes("UTF-8")))) + "?=";
  11. }
  12. else {
  13. encoderName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20").replace("%2B", "+");
  14. }
  15. response.setHeader("Content-Disposition", "attachment;filename=\"" + encoderName + "\"");
  16. response.setContentType("application/octet-stream; charset=utf-8");
  17. response.setHeader("Accept-Ranges", "bytes");
  18. OutputStream ot = response.getOutputStream();
  19. // 循环取出流中的数据
  20. byte[] b = new byte[1024];
  21. int len;
  22. try {
  23. while ((len = inStream.read(b)) > 0)
  24. {
  25. ot.write(b, 0, len);
  26. }
  27. } catch (Exception e) {
  28.  
  29. return false;
  30. }finally{
  31. if(ot!=null){
  32. ot.close();
  33. }
  34. if(inStream!=null){
  35. inStream.close();
  36. }
  37.  
  38. }
  39. return true;
  40. }

但是一直没有弹出保存提示,查资料后知道:ajax异步请求,dataType格式只支持有xml,html,script,json,jsonp,text,不支持二进制流文件类型

解决方法:
前端改成使用form表单提交方式即可

修改前端代码如下:

  1. <body>
  2. ...
  3. <a class="mini-button mini-button-danger" onclick="exportCareerUnit()" >导出</a>
  4.  
  5. ...
  6. ...
  7. <form id="careerForm" action="${path}/mvc/career/exportCareerUnitMsg" style="display: none" method="post" >
  8. <input id="careerSubForm" name="careerSubForm" />
  9. </form>
  10. </body>
  11.  
  12. <script>
  13. function exportCareerUnit(){
  14.  
  15. var o = {
  16. sys:sysParam
  17.    };
  18. $("#careerSubForm").val("");
  19. var json = JSON.stringify(o);
  20. $("#careerSubForm").val(json);
  21. $("#careerForm").submit(); //表单提交
  22.  
  23. }
  24. </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. CSP 通信网络(201709-4)

    问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M条通路,每条通路只能单向传递信息,即一条从部门a到部门b的通路只能由a向b传递信息.信息可以通过中转的方式进行传递,即如果a能将信息 ...

  2. python虚拟环境的的使用

    基于创建虚拟环境 virtualenv 安装 pip3 install virtualenv 通过virtulaenv创建虚拟环境 virtualenv luffycity --python=C:\P ...

  3. JSONObject 的使用

    1. 导入依赖 这里以 20180813 的 json 版本为例 <dependency> <groupId>org.json</groupId> <arti ...

  4. 怎样创建并使用 vue 组件 (component) ?

    组件化开发 需要使用到组件, 围绕组件, Vue 提供了一系列功能方法, 这里仅记录组件的 最简单 的使用方法. 1. 通过 Vue.component(tagName, options) 注册一个 ...

  5. Comparable内部比较器 和 Comparator外部比较器

    1:Comparable a:基本数据类型封装类都继承了Comparable接口 b:TreeSet 和TreeMap集合默认是按照自然顺序排序的 c:继承类中实现compareTo()方法,在类内部 ...

  6. 【原创】大叔经验分享(60)hive和spark读取kudu表

    从impala中创建kudu表之后,如果想从hive或spark sql直接读取,会报错: Caused by: java.lang.ClassNotFoundException: com.cloud ...

  7. Java设计模式只好

    有时,一些学生私下问我:如何学习前端问题.这里有一个统一的回复,下次我遇到这个问题,同学们会直接给你发这篇文章的链接地址. “如何学习前端”应该因人而异,其他人的方法可能不适合自己.让我们谈谈我的学习 ...

  8. 1 c#传递表变量去存储数据的例子

    1 c# 代码 using (SqlConnection con = GetEditorConnection()) { con.Open(); using (SqlCommand command = ...

  9. Python实现串口通信(pyserial)

    pyserial模块封装了对串口的访问,兼容各种平台. 安装 pip insatll pyserial 初始化 简单初始化示例 import serial ser = serial.Serial('c ...

  10. LINUX中lrzsz软件的使用

    安装lrzsz 可以在Linux 和 windows直接相互传文件 Linux无论ssh跳过去也可以sz rz打开图像进行传输文件 [root@master2 ~]# yum install lrzs ...