Ajax处理下载文件response没有反应
2016-07-26 21:55
393 查看
要实现下载Excel的功能,思路很简单,后台servlet根据数据库的数据生成Excel保存在指定位置,然后保存到response的输入流中,最后将零时的Excel删除:
前台ajax也很简单:
想法很好,但是现实很残酷,点了下载按钮,一点反应都没!
最后网上查了下,发现问题是ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的。
解决方案,不用ajax:
参考
.... //省略poi生成Excle的过程 .... response.setHeader("content-type","text/html;charset=UTF-8"); response.addHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8")); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(filePath + "\\" + fileName + ".xls"); int len = 0; byte[] buffer = new byte[1024]; out = response.getOutputStream(); while((len = in.read(buffer)) > 0) { out.write(buffer,0,len); } }catch(Exception e) { System.out.println("网络连接故障!错误信息:"+e.getMessage()); }finally { if(in != null) { try { out.close(); in.close(); response.flushBuffer(); }catch(Exception e) { throw new RuntimeException(e); } } } fileExcel.delete();//delete the excel in the end
前台ajax也很简单:
$.ajax({ type: "POST", async: false, url: regionURL , success:function(data){ // alert(data); } });
想法很好,但是现实很残酷,点了下载按钮,一点反应都没!
最后网上查了下,发现问题是ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的。
解决方案,不用ajax:
window.location.href=regionURL;
参考
相关文章推荐
- Object 详解
- Java中synchronized关键字的使用
- Visual Studio和VA快捷键
- HDU 1044
- 两个EditText互相监听发生栈溢出
- Validate Binary Search Tree
- 在JavaScript中自定义对象
- Android使用SVG实现今日头条下拉刷新动画
- linux基础2
- malloc原理和内存碎片(1)
- 【NOI1999】poj1191 棋盘分割
- Java线程的休眠
- Linux下的几种实用软件安装方法
- 【c++】初步探索c++对象模型
- 相机姿态估计(二)--单目POSIT算法
- IP地址与子网掩码
- ESXi 主机关闭默认https的欢迎页面
- select函数详解及其应用
- pthread第一次使用
- 基于Heros的过程间数据流分析的相关API