spring3.0.5MVC 文件下载IE提示无法下载问题解决
来源:互联网 发布:c语言不等于 编辑:程序博客网 时间:2024/05/17 04:38
开发环境:spring3.0.5MVC+Hibernate3
问题:在spring3.0.5MVC的java web开发框架下,进行了文件下载的测试,在测试过程中发现了在IE浏览器上提示无法下载问题。
对于这个问题,刚开始我也没有任何的想法,只能通过debug一步一步走着,刚开始的做法是通过返回一个ResponseEntity<byte[]>进行下载,可是通过IE浏览器的F12工具调试发现,结果码一直是201,我又开始怀疑这是不是因为结果码201的问题导致了IE浏览器对结果返回的不识别。于是,我又开始折腾起来了,好不容易把结果码弄成了200,可IE依然坚持着它的臭脾气,依然对你说着,我没发下载,你继续折腾去吧。
这时,我这该死的钻牛角尖的臭脾气上来了,我就一直捣鼓着,结果还是可喜可贺的,结果还是成功地被我捣鼓出来了。
下面展示代码时刻到了,只要您遵守我下面的操作,下载就没什么问题了,你也不用跟我一样受IE的臭脾气了。
我的顺序依然是先前端,后后台。
前端页面代码,如下:
<input type="button" value="下载项目文档" onclick="download()" class="DotButton"/>
前端JS代码,如下:
//下载文件function download(){var project_document=document.getElementById("project_document").value;if(project_document==""){alert("提示\n\n该项目没有上传文件!");return false;}else{document.getElementById("actForm").action="download.bia";document.getElementById("actForm").submit();}}
这里的actForm是页面的一个Form表单。
好了,前端页面+JS代码都已经完成了,下面就来看看后端代码如何实现了。
后端代码如下:
//文件下载@RequestMapping(value="project/download",method = RequestMethod.POST)public void download( HttpServletRequest request, HttpServletResponse response,String project_document) throws IOException{//得到项目上传的文件名String path = request.getSession().getServletContext().getRealPath("/doc/") +"\\"+ project_document.substring(0, project_document.length()-1);System.out.println(path);String filename=project_document.substring(0, project_document.length()-1);response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); BufferedInputStream bis = null; BufferedOutputStream bos = null; long fileLength = new File(path).length(); //解决文件中文乱码if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");}//firefox浏览器else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0){filename = URLEncoder.encode(filename, "UTF-8");}//IE浏览器response.reset(); response.setContentType("application/octet-stream"); response.setHeader("Content-disposition", "attachment; filename=\"" + filename + "\""); response.setHeader("Content-Length", String.valueOf(fileLength)); bis = new BufferedInputStream(new FileInputStream(path)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } bis.close(); bos.close(); }
看到这里你应该了解到为什么我先前的IE下载不成功的原因了,就是因为浏览器不同,还有浏览器版本的问题。
上面的path就是文件的路劲名,当然这路径是直指要下载的文件名。filename,这从字面上页能了解到是什么了吧,就是文件名,我这里是做了下去斜线的处理,你们不必做。这里的重点是必须对文件名进行上面的转码操作,不然也会导致下载不成功。
到这里spring3.0.5MVC的文件下载功能就介绍完毕了,希望对你有所帮助。
如果按照上述操作还不成功,那就有可能是你的springMVC的配置问题了,配置可查看我前面几篇博文。springMVC配置
- spring3.0.5MVC 文件下载IE提示无法下载问题解决
- IE访问HTTPS链接下载文件,IE提示无法下载
- IE访问HTTPS链接下载文件,IE提示无法下载
- spring3.0 mvc 文件下载
- Spring MVC 文件下载IE浏览器不支持的问题解决
- 使用spring mvc做文件下载时ie浏览器文件名乱码和下载不了问题解决
- ie下载提示:无法下载,下载的站点不可用
- xp ie 8 mvc 下载 文件 问题
- Spring MVC 文件下载 - 兼容IE
- spring mvc 下载文件,ie不支持解决
- eclipse spring mvc json ie下载文件
- xml文件提示下载,IE打不开
- xml文件提示下载,IE打不开
- 【转载】为何IE提示不允许下载文件
- ajaxSubmit 上传文件 IE下提示下载
- .net MVC 下载文件乱码问题解决方案
- struts2+extjs文件上传,提示下载问题解决
- FF与IE,下载提示框文件名乱码问题解决
- hdu 1083 Courses(二分图匹配 匈牙利算法)
- Oracle decode函数
- 菜鸟学android——正则表达式,替换
- 线段树2练习
- Servlet第三课 Form 表单的应用
- spring3.0.5MVC 文件下载IE提示无法下载问题解决
- 用chnroutes鉴别国内外DNS地址加快VPN速度
- pdf转换成excel转换器
- The import javax.servlet cannot be resolved解决方法
- Android Service 服务(二)—— BroadcastReceiver .
- acm 电子钟
- android之Alarm
- C++多线程框架 (二)---------Mutex互斥和Sem信号量
- acm HNU Dwarf Tower