我需要计算写入HttpServletResponse的实际字节数,以确保整个文件已被传输。我天真的做法是这样的:
InputStream instream = InputStream instream = new FileInputStream("myfile.zip");
ServletOutputStream outputStream = res.getOutputStream();
CountingInputStream countingInputStream = new CountingInputStream(instream);
IOUtils.copy(countingInputStream, outputStream);
log.debug("Expected count: " + String.valueOf(contentLength));
log.debug("getCount: " + countingInputStream.getCount());
outputStream.close();
countingInputStream.close();
instream.close();
虽然这种方法在Jetty上运行良好,但Tomcat总是返回要写入的完整输出流,即使客户端已取消下载。
此外,这在Tomcat 6上也运行良好多年。我们现在不得不迁移到Tomcat 7并遇到了这个问题。
有没有办法计算实际发送到客户端的字节数?
答案 0 :(得分:0)
您需要调查几件事情:
另一件事是,在版本7.0.27之后,tomcat流式基础架构遭受了对websockets实现的重大重构。有关详细信息,请查看此处:
http://www.tomcatexpert.com/blog/2012/05/01/how-apache-tomcat-implemented-websocket