ファイルのコンテンツをバイト配列に読み取り、その後、応答の OutputStream に書き込まれるサーブレットを作成しました。
// set headers
resp.setHeader("Content-Disposition","attachment; filename=\"file.txt\"");
resp.setHeader("Content-Length", "" + fileSize);
// output file content.
OutputStream out = resp.getOutputStream();
out.write(fileBytes);
out.close();
ここで、ファイルの大きさを調べる必要がある「クライアント」も作成しました。「Content-Length」ヘッダーを追加したので、これは簡単です。
URLConnection conn = url.openConnection();
long fileSize = conn.getContentLength();
しかし、私は全体像について少し不確かです。私自身のサーブレットを理解しているので、ファイルの内容全体が応答の OutputStream にダンプされます。しかし、getContentLength() を呼び出すと、実際のファイル データが何らかの形で部分的または完全にダウンロードされるのでしょうか? つまり、conn.getContentLength() を呼び出すと、サーバーからどのくらいのファイルが返されるのでしょうか? ヘッダーはコンテンツから「分離」されていますか?
すべての入力を高く評価します!