从Web下载之前获取图像文件的大小

时间:2012-08-22 19:07:55

标签: c# .net

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

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

代码运行得很好。

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

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

5 个答案:

答案 0 :(得分:12)

以下是您可以尝试的简单示例 如果您有不同扩展名的文件,如.GIF,.JPG等 您可以在Switch Case Statement

中创建变量或包装代码
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");

答案 1 :(得分:6)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您可以使用以下代码:

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;
}