代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  8
  • Alex  · 技术社区  · 16 年前

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

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

    我用的是C#.Net 4

    编辑:我作为一个客户,并要求从其他网络服务器的信息。

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

    3 回复  |  直到 16 年前
        1
  •  11
  •   Jon Hanna    14 年前

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

    new FileInfo(path).Length;
    

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

    例如,要获取此页面上使用的sprite PNG,浏览器会执行get to http://sstatic.net/stackoverflow/img/sprites.png 结果是:

    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
    

    差不多 但没有实体

    编辑:

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

        2
  •  2
  •   Teekin    16 年前
    System.IO.FileInfo fi = new System.IO.FileInfo(filepath);
    fi.Length();
    

    嘘,只是一个提示: http://www.google.ca/#hl=en&source=hp&q=c%23+get+file+size&aq=f&aqi=g4g-m2&aql=&oq=&gs_rfai=&fp=e6a957a020d2d8f6

    如果您需要/想要严格地通过HTTP来实现这一点,那么应该尝试捕获请求附带的Content-Length头。但它可能并不总是存在,因此您必须对此进行试验,并确保web服务器准确地说明文件长度。例如,如果它是来自脚本的图像,那么Content-Length头可能会丢失(在这种情况下,为某人感到羞耻)。

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

        3
  •  1
  •   koan    16 年前

    推荐文章