我需要计算写入HttpServletResponse的实际字节数以确保整个文件已被传输。我天真的做法是这样的:计算写入tomcat的实际字节数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();
虽然这种方法效果很好的码头,Tomcat的总是返回写入完整的OutputStream,即使客户已经取消了下载。我们现在不得不迁移到Tomcat 7并遇到这个问题。
有没有一种方法可以计算实际发送给客户端的字节数?
尝试'字节[]字节= IOUtils.toByteArray(的inputStream);' –
这可能是可能的Tomcat 7(或在之间的一些其他服务器)是缓冲在将其发送到客户端之前的输出 – JoseM
@Suzon这会导致流缓冲在byte []中。我们正在传输2GB的文件。所以如果它能工作的话,这将不会表现的很好。 – Randy