Вопрос по .net, c# – Получить размер файла изображения перед загрузкой из Интернета

10

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

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

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

I want to know if there is a way i can get the size of this image file before I download it.

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

Возможный дубликатGet http:/.../File Size Francis

Ваш Ответ

4   ответа
6

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

0

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

Вопрос и ответ по указанной ссылке не нуждаются в объяснении, и трудно что-то добавить. Я не хочу копировать и вставлять ответ из оригинального сообщения. В любом случае, спасибо за комментарий, я учту его в будущем.
Добро пожаловать в ТАК. Так что ответы должны содержать краткое изложение ссылки - проверьтеFAQ - "Предоставить контекст для ссылок".
-1. Или оставьте комментарий или добавьте ссылку на ответ.
2

проверки длины содержимого в ответе.

11

если у вас есть файлы разных расширений, таких как .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.OpenRead () открывает читаемый поток для загруженных данных. Поэтому он должен быть закрыт после использования. Нечто подобное предотвращает сбой вашего приложения:using (var sr = client.OpenRead(uri)) { ... }
Можете ли вы показать нам след стека аварии?
Для меня это работает как талисман, но после третьего использования он останавливает все и вылетает. Я даже пытался вызвать client.Dispose (), но это не помогает ... У вас есть идеи, почему это может происходить? Спасибо!

Похожие вопросы