【发布时间】:2013-09-25 05:54:31
【问题描述】:
我有 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);
}
【问题讨论】:
-
它应该如何知道内容长度以便它可以在标题中设置它?
标签: java servlets http-headers http-content-length