15

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

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

代码运行得非常好。

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

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

4

5 回答 5

23

这是一个简单的示例,如果您有不同扩展名(如 .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");
于 2012-08-22T19:11:54.353 回答
6

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

于 2012-08-22T19:11:43.603 回答
2

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

于 2012-08-22T19:12:30.067 回答
2

您可以使用以下代码:

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;
}
于 2019-06-02T19:49:06.767 回答
0

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

于 2012-08-22T19:11:58.630 回答