Pytanie w sprawie c#, .net – Uzyskaj rozmiar pliku obrazu przed pobraniem z Internetu

10

Pobieranie plików obrazów z Internetu odbywa się za pomocą następującego kodu w mojej aplikacji konsoli.

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

Kod działa bez zarzutu.

Chcę wiedzieć, czy istnieje sposób na uzyskanie rozmiaru tego pliku obrazu przed jego pobraniem.

PS - Właściwie to napisałem kod, aby zrobić robota, który porusza się po witrynie, pobierając pliki obrazów. Więc nie znam wcześniej jego rozmiaru. Mam tylko pełną ścieżkę pliku, który został wyodrębniony ze źródła strony internetowej.

Możliwy duplikatUzyskaj http: /.../ Rozmiar pliku Francis

Twoja odpowiedź

4   odpowiedź
6

Jeśli usługa internetowa daje ciDługość treści Nagłówek HTTP to będzie rozmiar pliku obrazu. Jeśli jednak usługa internetowa chce „przesyłać strumieniowo” dane do Ciebie (za pomocą kodowania Chunk), nie będziesz wiedział, dopóki cały plik nie zostanie pobrany.

0

Powinieneś spojrzeć na tę odpowiedź:C # Uzyskaj http: /… / rozmiar pliku gdzie twoje pytanie jest w pełni wyjaśnione. Używa żądania HEAD HTTP do pobrania rozmiaru pliku, ale możesz także odczytać nagłówek „Content-Length” podczas żądania GET przed odczytaniem strumienia odpowiedzi.

-1. Zrób komentarz lub dodaj podsumowanie linku do odpowiedzi. Alexei Levenkov
Pytanie i odpowiedź w określonym linku nie wymagają wyjaśnienia i trudno jest coś dodać. Nie chcę kopiować i wklejać odpowiedzi z oryginalnego posta. W każdym razie, dzięki za komentarz, wezmę to pod uwagę w przyszłości. Perevalov
Witamy w SO. Oczekuje się, że odpowiedzi SO będą zawierać podsumowanie łącza - sprawdźFAQ - „Podaj kontekst dla linków”. Alexei Levenkov
2

Możesz użyć HttpWebRequest, aby wysłać zapytanie do metody HEAD pliku i sprawdzić długość treści w odpowiedzi

11

Oto prosty przykład, którego możesz spróbować, jeśli masz pliki o różnych rozszerzeniach, takich jak .GIF, .JPG itp., Możesz utworzyć zmienną lub zawinąć kod w Oświadczenie dotyczące sprawy przełączania

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");
czy możesz nam pokazać ślad katastrofy? knocte
Kiedy chcę pobrać za pomocą tego samego klienta internetowego, czy powinienem zamknąć otwarte połączenie (aby odczytać rozmiar), czy co powinienem dokładnie zrobić? Mohammed Noureldin
client.OpenRead () otwiera czytelny strumień pobieranych danych. Więc musi być zamknięty po użyciu. Coś takiego uniemożliwia awarię aplikacji:using (var sr = client.OpenRead(uri)) { ... } jurajvt
Działa to dla mnie jak urok, ale po trzecim użyciu zatrzymuje wszystko i ulega awarii. Próbowałem nawet wywołać client.Dispose (), ale to nie pomaga ... Czy masz jakiś pomysł, dlaczego tak się dzieje? Dzięki! Thpramos

Powiązane pytania