2012-08-22 10 views
8

Ich lade Bilddateien aus dem Internet mit dem folgenden Code in meiner Konsolenanwendung herunter.Größe der Bilddatei vor dem Herunterladen aus dem Internet herunterladen

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 erhalten, bevor ich es herunterladen.

PS- Eigentlich habe ich Code geschrieben, um einen Crawler zu machen, der sich um die Site bewegt, die Bilddateien herunterlädt. Also ich kenne seine Größe vorher nicht. Alles, was ich habe, ist der vollständige Dateipfad, der aus der Quelle der Webseite extrahiert wurde.

+0

Mögliches Duplikat [Get http: /.../ Dateigröße] (http: // Stackoverflow .com/questions/122853/get-http-file-size) – Francis

Antwort

6

Wenn der Web-Service Ihnen einen Content-Length HTTP-Header gibt, wird es die Bilddateigröße sein. Wenn der Web-Service jedoch Daten an Sie "streamen" möchte (mithilfe der Chunk-Codierung), werden Sie nicht wissen, bis die gesamte Datei heruntergeladen ist.

7

Hier ist ein einfaches Beispiel, das Sie versuchen können, wenn Sie Dateien von verschiedenen Erweiterungen wie .GIF haben, .JPG, etc Sie eine Variable erstellen oder den Code innerhalb eines Switch Case-Anweisung

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

Das funktioniert wie ein Zauber für mich, aber nach dem dritten Einsatz stoppt es alles und stürzt ab. Ich habe sogar versucht, client.Dispose() anzurufen, aber es hilft nicht ... Hast du eine Idee, warum das passieren könnte? Vielen Dank! – Thpramos

+0

Kannst du uns die Stapelspur des Absturzes zeigen? – knocte

0

wickeln Sie sollten diese Antwort betrachten: C# Get http:/…/File Size wo Ihre Frage vollständig erklärt wird. Es verwendet HEAD HTTP-Anforderung, um die Dateigröße abzurufen, aber Sie können auch den Header "Content-Length" während der GET-Anforderung lesen, bevor Sie den Antwortstream lesen.

+0

-1. Entweder es kommentieren oder eine Zusammenfassung des Links zur Antwort hinzufügen. –

+0

Frage und Antwort in angegebenen Link brauchen keine Erklärung und es ist schwierig, etwas hinzuzufügen. Ich möchte die Antwort nicht vom ursprünglichen Beitrag kopieren. Wie auch immer, danke für den Kommentar, ich werde es in Zukunft berücksichtigen. – Perevalov

+0

Willkommen bei SO. SO-Antworten sollen eine Zusammenfassung eines Links enthalten - überprüfen Sie [FAQ] (http://stackoverflow.com/questions/how-to-answer) - "Kontext für Links bereitstellen". –

2

können Sie verwenden eine HttpWebRequest, um die HEAD-Methode der Datei abzufragen und überprüfen, den Content-Length in der Antwort

Verwandte Themen