Frage an .net, c# – Holen Sie sich die Größe der Bilddatei, bevor Sie sie aus dem Internet herunterladen

10

Ich lade Bilddateien aus dem Internet mithilfe des folgenden Codes in meiner Konsolenanwendung herunter.

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

Der Code läuft absolut gut.

Ich möchte wissen, ob es eine Möglichkeit gibt, die Größe dieser Bilddatei zu ermitteln, bevor ich sie herunterlade.

PS: Eigentlich habe ich Code geschrieben, um einen Crawler zu erstellen, der sich auf der Site bewegt und Bilddateien herunterlädt. Daher kenne ich seine Größe vorher nicht. Ich habe nur den vollständigen Pfad der Datei, die aus der Quelle der Webseite extrahiert wurde.

Mögliches Duplikat vonHolen Sie sich http: /.../ Dateigröße Francis

Deine Antwort

4   die antwort
6

Wenn der Web-Service Ihnen eineInhaltslänge Der HTTP-Header hat dann die Größe der Bilddatei. Wenn der Webdienst jedoch Daten (unter Verwendung der Chunk-Codierung) zu Ihnen "streamen" möchte, wissen Sie nichts, bis die gesamte Datei heruntergeladen wurde.

2

Sie können eine HttpWebRequest verwenden, um die HEAD-Methode der Datei abzufragen und die Inhaltslänge in der Antwort zu überprüfen

11

Hier ist ein einfaches Beispiel, das Sie ausprobieren können, wenn Sie Dateien mit verschiedenen Erweiterungen wie .GIF, .JPG usw. haben. Sie können eine Variable erstellen oder den Code in eine Switch-Case-Anweisung einschließen

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 () öffnet einen lesbaren Stream für die heruntergeladenen Daten. Es muss also nach Gebrauch verschlossen werden. So etwas verhindert, dass Ihre App abstürzt:using (var sr = client.OpenRead(uri)) { ... } jurajvt
Das funktioniert für mich wie ein Zauber, aber nach dem dritten Gebrauch stoppt es alles und stürzt ab. Ich habe sogar versucht, client.Dispose () anzurufen, aber es hilft nicht ... Haben Sie eine Idee, warum das passieren könnte? Vielen Dank! Thpramos
Wenn ich mit demselben Webclient herunterladen möchte, muss ich die geöffnete Verbindung schließen (um die Größe zu lesen), oder was muss ich genau tun? Mohammed Noureldin
Können Sie uns den Stack-Trace des Absturzes zeigen? knocte
0

Sie sollten sich diese Antwort ansehen:C # Get http: /… / Dateigröße wo deine frage vollständig erklärt ist. Es wird eine HEAD-HTTP-Anforderung zum Abrufen der Dateigröße verwendet. Sie können jedoch auch den Header "Content-Length" während der GET-Anforderung lesen, bevor Sie den Antwortdatenstrom lesen.

-1. Machen Sie entweder einen Kommentar oder fügen Sie der Antwort eine Zusammenfassung des Links hinzu. Alexei Levenkov
Frage und Antwort im angegebenen Link bedürfen keiner Erklärung und es ist schwierig, etwas hinzuzufügen. Ich möchte keine Antwort aus dem ursprünglichen Beitrag kopieren und einfügen. Wie auch immer, danke für den Kommentar, ich werde ihn in Zukunft berücksichtigen. Perevalov
Willkommen bei SO. SO Antworten sollen eine Zusammenfassung eines Linkchecks enthaltenFAQ - "Kontext für Links bereitstellen". Alexei Levenkov

Verwandte Fragen