spring3.0.5MVC 文件下载IE提示无法下载问题解决

开发环境: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="下载项目文档" οnclick="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配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值