gpt4 book ai didi

java - 计算写入 tomcat HttpServletResponse 的实际字节数

转载 作者:行者123 更新时间:2023-11-28 21:53:34 24 4
gpt4 key购买 nike

我需要计算写入 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 并遇到了这个问题。

有没有办法统计实际发送给客户端的字节数?

最佳答案

有几件事你必须调查:

  1. 是否提供了内容长度 header ?如果没有,tomcat 将缓存整个响应
  2. 确保容器配置为支持分块编码。
  3. 确保客户端支持分块编码(它不是 HTTP 1.0)

另一件事是,在 7.0.27 版本之后,tomcat 流式传输基础设施与 websockets 实现进行了重大重构。有关详细信息,请查看此处:

http://www.tomcatexpert.com/blog/2012/05/01/how-apache-tomcat-implemented-websocket

关于java - 计算写入 tomcat HttpServletResponse 的实际字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21991017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com