我写了一个用于下载文件的Tomcat Servlet。 这是代码:
String fileName = request.getParameter("file");
File file = new File(System.getenv("CATALINA_HOME") + File.separator + fileName);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/octet-stream");
response.setContentLength((int) file.length());
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
long start = System.currentTimeMillis();
OutputStream out = response.getOutputStream();
long written = FileUtils.copyFile(file, out);
out.flush();
long end = System.currentTimeMillis();
System.out.println(written + " bytes written in " + (end - start) + "ms");
我使用Firefox下载文件(localhost:8080 / download?file = test.txt)。 在几乎所有情况下,broser立即显示下载对话框,服务器控制台显示“以118ms写入的4342132字节”。
但每当我想下载包含.jar文件的.zip文件时,浏览器显示下载对话框最多需要20秒。有时,下载事件已中止。但是服务器日志显示“用129ms写的4883055字节”。
当我使用没有.jar文件的.zip文件时,一切正常。怎么可能????
这不是Firefox特有的问题。任何浏览器(FF,Chrome,Opera,...)都会出现此问题。