从Web服务器获取图像的大小而不加载它

Ale*_*lex 8 c# asp.net image

是否可以从Web服务器获取图像的大小(可能是其大小,以字节为单位),而不加载它?

Web服务器是否具有与文件大小相关的可访问属性(字段)?这样可以在不加载的情况下检查图像大小.

通常,当Web服务器的目录加载到浏览器中时,它会从服务器端告诉您每个文件的大小.作为ASP开发人员,我可以访问该数据吗?

我正在使用C#.Net 4

编辑:我充当客户端并从其他Web服务器请求此信息.

一如既往地感谢任何帮助.亚历克斯

Jon*_*nna 11

你的意思是当你是服务器或客户端?

如果你是服务器,你可以找到任何你能找到的关于任何其他文件的东西(假设图像流来自文件).

new FileInfo(path).Length;
Run Code Online (Sandbox Code Playgroud)

如果你的意思是你在做客户端代码(你正在访问另一个网络服务器)

做一个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
Run Code Online (Sandbox Code Playgroud)

后跟实际图像文件的八位字节.

执行HEAD而不是获取结果:

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
Run Code Online (Sandbox Code Playgroud)

几乎相同但没有实体主体.此时我们可以看到图像大小为18607字节,而不是实际下载它.如果图像将被分块发送,则此方法将不起作用,因为内容长度不会在标头中发送.

编辑:

值得指出的是,有时使用分块内容,您将别无选择,只能下载整个内容,因为服务器在开始发送时不会说(甚至可能不知道)大小.遗憾的是,这也可能适用于特别大的流.令人高兴的是,这不太可能与图像一起使用.