Получите размер файла изображения перед загрузкой из Интернета.

Я загружаю файлы изображений из Интернета, используя следующий код в своем консольном приложении.

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

Код работает абсолютно нормально.

Я хочу знать, есть ли способ получить размер этого файла изображения, прежде чем загружать его.

PS. На самом деле я написал код для создания искателя, который перемещается по сайту, загружая файлы изображений. Поэтому я не знаю его размера заранее. Все, что у меня есть, это полный путь к файлу, который был извлечен из источника веб-страницы.

Ответ 1

Вот простой пример, который вы можете попробовать если у вас есть файлы разных расширений, например .GIF,.JPG и т.д. вы можете создать переменную или обернуть код в выражении оператора коммутатора

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");

Ответ 2

Если веб-сервис предоставляет Content-Length HTTP-заголовок, то это будет размер файла изображения. Однако, если веб-служба хочет "передать" вам данные (используя кодировку Chunk), вы не узнаете, пока не будет загружен весь файл.

Ответ 3

Вы можете использовать HttpWebRequest для запроса HEAD-метода файла и проверки Content-Length в ответе

Ответ 4

Вы должны посмотреть на этот ответ: С# Получить http:/.../Размер файла, где ваш вопрос будет полностью объяснен. Он использует запрос HEAD HTTP для получения размера файла, но вы также можете прочитать заголовок "Content-Length" во время запроса GET перед чтением потока ответов.

Ответ 5

Вы можете использовать этот код:

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