你的意思是当你是服务器还是客户端?
如果您是服务器,您可以找到任何其他文件的任何内容(假设图像流来自文件)。
new FileInfo(path).Length;
如果你的意思是你正在做客户端代码(你正在访问另一个网络服务器)
执行 HEAD 请求。虽然有些服务器的行为不正确,但对 HEAD 的正确响应与对 GET 的响应几乎相同,只是不发送实体。
例如,为了获取此页面上使用的精灵 PNG,浏览器对 http://sstatic.net/stackoverflow/img/sprites.png 执行 GET 操作,从而得到响应:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Aug 2010 01:06:21 GMT
Content-Type: image/png
Connection: keep-alive
Cache-Control: max-age=604800
Last-Modified: Tue, 13 Jul 2010 06:28:14 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET
Content-Length: 18607
后面是实际图像文件的八位字节。
执行 HEAD 而不是 get 结果:
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Aug 2010 01:07:20 GMT
Content-Type: image/png
Connection: keep-alive
Cache-Control: max-age=604800
Content-Length: 18607
Last-Modified: Tue, 13 Jul 2010 06:28:14 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET
几乎相同但没有实体主体。此时我们可以看到图片大小为18607bytes,没有实际下载。如果图像被分块发送,此方法将不起作用,因为内容长度不会在标头中发送。
编辑:
值得指出的是,有时对于分块内容,您别无选择,只能下载整个内容,因为服务器在开始发送时不会说(甚至可能不知道)大小。可悲的是,这也可能用于特别大的流。令人高兴的是,这不太可能用于图像。