有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 2 servlet,一个在响应中获得ContentLength,另一个则没有

我有两个不同的servlet,都在处理POST调用,结果都是流式传输文件。 一个总是以内容长度的标题结束,另一个永远不会。 它们都使用javax。servlet。http。HttpServletResponse

两者都设置了“内容类型”=“应用程序/八位字节流”

我还没有弄清楚我能做些什么来造成这种差异

我在处理过程中看到的唯一真正区别是,没有获取内容长度的文件的大小通常是多MB,而另一个文件的大小通常只有几KB

真是见鬼,我确实试过使用回复。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);
  }

共 (1) 个答案

  1. # 1 楼答案

    我有一个DOH!几分钟后。当然,它不能在大文件完全流式传输之前设置内容长度——而且由于它是以片段流式传输的,所以在收到回复时,内容长度就不知道了。 我的AddInHeader()不起作用的原因是它是在文件流传输之后完成的,所以响应很久以前就已经发送了