Получите размер файла изображения перед загрузкой из Интернета.
Я загружаю файлы изображений из Интернета, используя следующий код в своем консольном приложении.
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;
}