servlet下载文件不支持迅雷的解决方法
servlet实现下载时,如果客户端安装了迅雷,发现不能正确下载。查找原因后发现是http头设置的问题,如文件类型CONTEN-TYPE、文件长度CONTEN-LENGTH。具体解决如下:
response.setHeader("Content-Disposition", "attachment;filename=" + browName);response.setContentLength(fileSize);response.setContentType(contentType);byte[] fileByte = new byte;while (fileInputStream.read(fileByte) > 0){out.write(fileByte, 0, fileByte.length);}out.flush();out.close();out = null; 其中,
response.setContentLength(fileSize);
response.setContentType(contentType);
两句是关键。
另外,如果不想使用讯雷监控附件下载,可以取消讯雷对IE的监控。方法如下图所示
http://dl.iteye.com/upload/attachment/169883/48c1f1d7-9ceb-312b-bacb-dc7c519dab58.png
========================================
关于下载中文文件名的问题,不同浏览器需要使用不同的编码,下载前要在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 上都能正常显示中文文件名(只测试了较新的浏览器)。
页:
[1]