URLConnection和内容长度:下载多少数据?

时间:2011-08-26 09:16:19

标签: java outputstream urlconnection

我创建了一个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()时,将从服务器返回多少文件?标题是否与内容“分开”?

所有输入都非常感谢!

2 个答案:

答案 0 :(得分:2)

  

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

不,getContentLength()方法只返回内容大小的String值作为整数。

  

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

不会下载任何文件。

  

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

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

现在你确定了:D

答案 1 :(得分:1)

请参阅javadocs

  

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

因此,对getContentLength()的调用只会读取标头值,并且不会导致任何下载。你必须为此致电getContent()