spring3.0.5MVC 文件下载IE提示无法下载问题解决
2014-07-28 15:44
501 查看
开发环境:spring3.0.5MVC+Hibernate3
问题:在spring3.0.5MVC的java web开发框架下,进行了文件下载的测试,在测试过程中发现了在IE浏览器上提示无法下载问题。
对于这个问题,刚开始我也没有任何的想法,只能通过debug一步一步走着,刚开始的做法是通过返回一个ResponseEntity<byte[]>进行下载,可是通过IE浏览器的F12工具调试发现,结果码一直是201,我又开始怀疑这是不是因为结果码201的问题导致了IE浏览器对结果返回的不识别。于是,我又开始折腾起来了,好不容易把结果码弄成了200,可IE依然坚持着它的臭脾气,依然对你说着,我没发下载,你继续折腾去吧。
这时,我这该死的钻牛角尖的臭脾气上来了,我就一直捣鼓着,结果还是可喜可贺的,结果还是成功地被我捣鼓出来了。
下面展示代码时刻到了,只要您遵守我下面的操作,下载就没什么问题了,你也不用跟我一样受IE的臭脾气了。
我的顺序依然是先前端,后后台。
前端页面代码,如下:
前端JS代码,如下:
这里的actForm是页面的一个Form表单。
好了,前端页面+JS代码都已经完成了,下面就来看看后端代码如何实现了。
后端代码如下:
看到这里你应该了解到为什么我先前的IE下载不成功的原因了,就是因为浏览器不同,还有浏览器版本的问题。
上面的path就是文件的路劲名,当然这路径是直指要下载的文件名。filename,这从字面上页能了解到是什么了吧,就是文件名,我这里是做了下去斜线的处理,你们不必做。这里的重点是必须对文件名进行上面的转码操作,不然也会导致下载不成功。
到这里spring3.0.5MVC的文件下载功能就介绍完毕了,希望对你有所帮助。
如果按照上述操作还不成功,那就有可能是你的springMVC的配置问题了,配置可查看我前面几篇博文。springMVC配置
问题:在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配置
相关文章推荐
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- lftp下载文件无法覆盖,提示" file already existst and xfer:clobber is unset" 问题解决
- 解决IE下AjaxSubmit上传文件提示下载文件问题
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- lftp下载文件无法覆盖,提示" file already existst and xfer:clobber is unset" 问题解决
- nutch无法下载中文文件的问题[解决]
- iis 6.0 中一些文件无法下载问题解决
- 网页无法播放flv文件,服务器也无法下载,提示找不到文件的问题
- PHP IE下载时提示”无法复制 无法读取源文件或磁盘”的解决办法
- 服务器IIS无法提供某种扩展名的文件的下载或访问某种类型文件提示http 404 错误时的解决办法
- 解决IE中部分文件格式不能下载的问题(附MIME大全)
- IE下载Office2007文件时在下载对话框中变成ZIP文件问题的解决
- 如何解决下载的CHM文件无法显示网页问题
- 解决 IIS 中 AIR 文件无法下载的问题
- php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
- 如何解决下载的CHM文件无法显示网页问题
- 解决ie无法打开php页面,提示下载
- 解决在Windows 2003中无法上传超过200K文件以及无法下载超过4M的文件问题