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的监控。方法如下图所示

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

 

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

 

关于下载中文文件名的问题,不同浏览器需要使用不同的编码,下载前要在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 上都能正常显示中文文件名(只测试了较新的浏览器)。

 

你可能感兴趣的:(C++,c,servlet,OS,C#)