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

C# 从Web服务器获取图像的大小而不加载它,c#,asp.net,image,C#,Asp.net,Image,是否可以在不加载图像的情况下从web服务器获取图像的大小(可能以字节为单位) 关于文件大小,web服务器是否具有可访问的属性(字段)?这将允许在不加载的情况下检查图像大小 通常,当web服务器的目录加载到浏览器中时,它会从服务器端告诉您每个文件的大小。作为ASP开发人员,我是否可以访问这些数据 我使用的是C#Net 4 编辑:我作为一个客户端,从其他web服务器请求此信息 一如既往,感谢您的帮助。 亚历克斯 嘘,只是一个提示: 如果您需要/希望严格通过HTTP执行此操作,则应尝试捕获请求附带的内

是否可以在不加载图像的情况下从web服务器获取图像的大小(可能以字节为单位)

关于文件大小,web服务器是否具有可访问的属性(字段)?这将允许在不加载的情况下检查图像大小

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

我使用的是C#Net 4

编辑:我作为一个客户端,从其他web服务器请求此信息

一如既往,感谢您的帮助。 亚历克斯

嘘,只是一个提示:

如果您需要/希望严格通过HTTP执行此操作,则应尝试捕获请求附带的内容长度头。但它可能并不总是存在,因此您必须对此进行试验,并确保web服务器准确地声明文件长度。例如,如果它是来自脚本的图像,则可能缺少内容长度标题(在这种情况下,为某人感到羞耻)


如果缺少内容长度,那么我很确定,如果不下载文件,就无法通过HTTP确定文件的大小。内容长度标题正是用于这类事情。

您是指当您是服务器还是客户端时

如果你是服务器,你可以找到任何关于其他文件的信息(假设图像流来自一个文件)

如果您的意思是您正在执行客户端代码(您正在访问另一个Web服务器)

做一个头部请求。虽然有些服务器的行为不正确,但对HEAD的正确响应与GET的响应几乎相同,只是没有发送实体

例如,要获取此页面上使用的sprite 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
基本相同,但没有实体体。在这一点上,我们可以看到图像的大小是18607字节,而没有实际下载它。但是,如果将图像分块发送,则此方法将不起作用,因为这样就不会在头中发送内容长度

编辑:


值得指出的是,有时对于分块内容,您除了下载整个内容之外别无选择,因为服务器在开始发送时不会说(甚至可能不知道)大小。不幸的是,这也可能用于特别大的流。令人高兴的是,这不太可能用于图像。

有许多web服务器不提供内容长度字段。您必须确保您的代码能够容忍这种情况。

。。好消息。我想到了HTTP头检查,您已经通过内容长度完美地定义了这一点。我们总是可以跳过任何不可靠的标题数据,但希望大部分内容都可用。谢谢我明天实施时会告诉你进展如何。这里是凌晨2点16分!!!:)如果发送的是
传输编码:Chunked
,那么就不能发送(在RFC 2119中,大写的“不得”)并且如果发送了,就必须忽略。System.IO.FileInfo是与web数据一起工作还是仅与本地数据一起工作?文件路径可以是URI吗?本地的,或者使用UNC来访问您也有文件访问权的机器,而不是web。我是作为客户端的。是的。所以文件信息不起作用,我明白了。尽管这里提到了陷阱,头部信息仍然是一条路。你不是说18607字节的大小吗?哈哈。我复制粘贴了,所以我不可能键入错误,然后我错误地复制粘贴了最大年龄。修复了,谢谢。是否可以在
HttpWebResponse
对象中找到此信息作为
response.Headers[“内容长度”]?我想明天会知道的-非常感谢!确实会的(我不确定ContentLength属性,我模糊地记得在这种情况下该属性的行为有点奇怪)。
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
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