私は 2 つの異なるサーブレットを持っています。どちらも POST 呼び出しを処理しており、結果としてファイルをストリーミングしています。1 つは常に Content-Length ヘッダーで終わりますが、もう 1 つは決してありません。どちらも javax.servlet.http.HttpServletResponse を使用します。
どちらも "Content-Type" = "application/octet-stream" を設定します。
この違いを引き起こすために何ができるかを理解できませんでした。
処理で見られる唯一の実際の違いは、Content-Length を取得しないファイルのサイズは通常数 MB であり、もう 1 つは通常わずか数 KB であることです。
念のため、response.AddHeader("thing", size) を使用してみましたが、そのヘッダーがどちらのサーブレットにも表示されないことに気付きました。
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);
}