【问题标题】:Get Size of Image File before downloading from web从网络下载之前获取图像文件的大小
【发布时间】:2012-08-18 06:29:17
【问题描述】:

我正在使用控制台应用程序中的以下代码从 Web 下载图像文件。

WebClient client = new WebClient();
client.DownloadFile(string address_of_image_file,string filename);

代码运行良好。

我想知道是否有办法在下载此图像文件之前获取它的大小。

PS- 实际上我已经编写了一个代码来制作一个爬虫,它可以在网站上移动下载图像文件。所以我事先并不知道它的大小。我所拥有的只是从网页源中提取的文件的完整路径。

【问题讨论】:

标签: c# .net


【解决方案1】:

这是一个简单的例子,你可以试试 如果您有不同扩展名的文件,例如 .GIF、.JPG 等 您可以创建变量或将代码包装在 Switch Case 语句中

System.Net.WebClient client = new System.Net.WebClient();
client.OpenRead("http://someURL.com/Images/MyImage.jpg");
Int64 bytes_total= Convert.ToInt64(client.ResponseHeaders["Content-Length"])
MessageBox.Show(bytes_total.ToString() + " Bytes");

【讨论】:

  • 这对我来说就像一个魅力,但在第三次使用后它会停止一切并崩溃。我什至尝试调用 client.Dispose() 但它没有帮助......你知道为什么会发生这种情况吗?谢谢!
  • client.OpenRead() 为下载的数据打开一个可读流。所以使用后必须关闭。这样的事情可以防止您的应用崩溃:using (var sr = client.OpenRead(uri)) { ... }
  • 当我想使用同一个webclient下载时,我应该关闭Opened连接(读取大小),还是我应该怎么做?
【解决方案2】:

如果网络服务为您提供Content-Length HTTP 标头,那么它将是图像文件大小。但是,如果 Web 服务想要将数据“流式传输”给您(使用 Chunk 编码),那么在整个文件下载之前您不会知道。

【讨论】:

    【解决方案3】:

    您可以使用HttpWebRequest查询文件的HEAD方法并检查响应中的Content-Length

    【讨论】:

      【解决方案4】:

      您可以使用此代码:

      using System.Net;
      
      public long GetFileSize(string url)
      {
          long result = 0;
      
          WebRequest req = WebRequest.Create(url);
          req.Method = "HEAD";
          using (WebResponse resp = req.GetResponse())
          {
              if (long.TryParse(resp.Headers.Get("Content-Length"), out long contentLength))
              {
                  result = contentLength;
              }
          }
      
          return result;
      }
      

      【讨论】:

        【解决方案5】:

        您应该查看以下答案:C# Get http:/…/File Size 您的问题已得到充分解释。它使用 HEAD HTTP 请求来检索文件大小,但您也可以在 GET 请求期间读取“Content-Length”标头,然后再读取响应流。

        【讨论】:

        • -1。要么发表评论,要么添加答案的链接摘要。
        • 指定链接中的问答无需解释,很难补充。我不想从原始帖子中复制粘贴答案。不管怎样,谢谢你的评论,我以后会考虑的。
        • 欢迎来到 SO。所以答案应该包含一个链接的摘要 - 检查FAQ - “为链接提供上下文”。
        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2010-09-05
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多