servlet下载文件不支持迅雷的解决方法

servlet实现下载时,如果客户端安装了迅雷,发现不能正确下载。查找原因后发现是http头设置的问题,如文件类型CONTEN-TYPE、文件长度CONTEN-LENGTH。

具体解决如下:

 

response.setHeader("Content-Disposition", "attachment;filename=" + browName);
response.setContentLength(fileSize);
response.setContentType(contentType);
byte[] fileByte = new byte[1024];
while (fileInputStream.read(fileByte) > 0){
	out.write(fileByte, 0, fileByte.length);
}
out.flush();
out.close();
out = null;
 

其中,

response.setContentLength(fileSize);
response.setContentType(contentType);

两句是关键。

 

另外,如果不想使用讯雷监控附件下载,可以取消讯雷对IE的监控。方法如下图所示

 

========================================

 

关于下载中文文件名的问题,不同浏览器需要使用不同的编码,下载前要在Java中进行文件名编码,实现如下:

 

	private static String encodeFileName(HttpServletRequest req, String name)
			throws UnsupportedEncodingException {
		String agent = req.getHeader("USER-AGENT").toLowerCase();

		if (agent != null
				&& agent.indexOf("firefox") < 0
				&& agent.indexOf("safari") < 0) {
			return URLEncoder.encode(name, "UTF8");
		}

		return new String(name.getBytes("UTF-8"), "ISO8859-1");
	}

 在多数浏览器中使用 UTF8 ,而在 firefox 和 safari 中使用 ISO8859-1 。经测试在 IE、Firefox、Chorme、Safari、Opera 上都能正常显示中文文件名(只测试了较新的浏览器)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值