0

我创建了一个 servlet,它将文件的内容读取到字节数组中,随后写入响应的 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();

但是,我对大局有点不确定。据我了解我自己的 servlet,整个文件内容被转储到响应的 OutputStream 中。但是,调用 getContentLength() 是否也会以某种方式部分或全部下载实际文件数据?换句话说,当我调用 conn.getContentLength() 时,服务器会返回多少文件?标题是否与内容“分开”?

高度赞赏所有输入!

4

2 回答 2

2

但是,调用 getContentLength() 是否也会以某种方式部分或全部下载实际文件数据?

不,该getContentLength()方法只是将内容大小的字符串值作为整数返回。

换句话说,当我调用 conn.getContentLength() 时,服务器会返回多少文件?

不会下载任何文件。

标题是否与内容“分开”?

是的,标题与内容“分开”。

现在你确定了:D

于 2011-08-26T09:26:12.123 回答
1

请参阅javadocs

返回content-length标头字段的值。

因此,调用getContentLength()仅读取标头值,不会导致任何下载。你必须为此打电话getContent()

于 2011-08-26T09:19:41.603 回答