在firebug下面我可以看到后台的2.9M的数据已经传到了前台,可是就是没有显示保存文件那样的对话框出来,真心不知道怎么回事了。。。。
下面是我网前台返回数据流的代码,希望大家能够帮个忙看看究竟怎么回事。。。
@RequestMapping("downLoadSelect") public void downloadSelect(int[] ids, HttpServletResponse response, HttpServletRequest request){ File zipFile = null; try { zipFile = tupianxxService.downLoad(request,response, ids); } catch (Exception e1) { e1.printStackTrace(); } response.reset(); response.setCharacterEncoding("utf-8"); response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment;fileName=abc.zip"); try { InputStream ins=new FileInputStream(zipFile); OutputStream bout = new BufferedOutputStream(response.getOutputStream()); byte[] b=new byte[1024]; int length; while((length=ins.read(b))>0){ bout.write(b,0,length); } bout.flush(); bout.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } }
前台window.location.href跳转就好了噻
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment"
+ "; filename=" + fileName);
没试过,不知道 大小写是否区分 。。自己 测试去吧。
不清楚是什么问题,不过你可以这样试下:
1、加上:
response.addHeader("Content-Length", "" + zipFile.length());
2、修改:
response.setHeader("Content-Disposition", "attachment;fileName=abc.zip");
为:
response.addHeader("Content-Disposition", "attachment;fileName=abc.zip");
3、改代码顺序,这个清楚是否一定行
bout.flush();
bout.close();
ins.close();
把ins.close()放到前面,如果还不行可以试下去掉bout.flush()。
建议用这个试试
window.location.href=<%=contextPath%>+ 'zsch/tupianxx/downLoadSelect?ids='+ids
下载好像不能用AJAX