0

ファイルのコンテンツをバイト配列に読み取り、その後、応答の 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() を呼び出すと、サーバーからどのくらいのファイルが返されるのでしょうか? ヘッダーはコンテンツから「分離」されていますか?

すべての入力を高く評価します!

4

2 に答える 2

2

しかし、getContentLength() を呼び出すと、実際のファイル データが何らかの形で部分的または完全にダウンロードされるのでしょうか?

いいえ、getContentLength()メソッドはコンテンツのサイズの文字列値を整数として返すだけです。

つまり、conn.getContentLength() を呼び出すと、サーバーからどのくらいのファイルが返されるのでしょうか?

ファイルはダウンロードされません。

ヘッダーはコンテンツから「分離」されていますか?

はい、ヘッダーはコンテンツから「分離」されています。

今、あなたは確信しています:D

于 2011-08-26T09:26:12.123 に答える
1

javadocを参照してください

content-lengthヘッダー フィールドの値を返します。

したがって、 への呼び出しgetContentLength()はヘッダー値を読み取るだけで、ダウンロードは発生しません。あなたはgetContent()それを求めなければなりません。

于 2011-08-26T09:19:41.603 に答える