0

我有 2 个不同的 servlet,它们都在处理 POST 调用,结果都是流式传输文件。一个总是以 Content-Length 标头结尾,另一个永远不会。它们都使用 javax.servlet.http.HttpServletResponse。

两者都设置“Content-Type”=“application/octet-stream”;

我无法弄清楚我可以做些什么来造成这种差异。

我在处理过程中看到的唯一真正区别是,没有获得 Content-Length 的文件的大小通常是几 MB,而另一个通常只有几 KB。

只是为了它,我确实尝试使用 response.AddHeader("thing", size),并注意到该标头从未出现在任何一个 servlet 中。

请注意,我在 OS/X 机器上接收文件,并使用 [NSHTTPURLResponse allHeaders] 查看响应标头。

这是一些大幅精简的代码。基本上只保留任何引用响应的内容:

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("application/octet-stream");
    resp.setBufferSize(256 * 1024);
    OutputStream rout = resp.getOutputStream();
// lots of work getting the stream
// Also left out all the exception handling and error checking
    IOUtils.copy(datafile, rout);
    rout.close();
    resp.addIntHeader("OnDeck-Test", 555);
  }
4

1 回答 1

0

我有一个DOH!几分钟后。当然,它不能在大文件完全流式传输之前设置 Content-Length - 由于它是分段流式传输的,因此在收到回复时不知道内容长度。我的 addIntHeader() 不起作用的原因是它是在文件被流式传输之后完成的,所以响应早就发送了。

于 2013-09-20T04:45:39.380 回答