2009-10-02 6 views
5

Ich versuche, ein Bild in einem "ToolStrip" i C# von einer Weburl anzuzeigen. Bin mit der folgenden Methode das BildImage Laden in C# von einer Web-URL

WebRequest requestPic5 = WebRequest.Create(icon_path); 
         requestPic5.Timeout = 5000; 
         WebResponse responsePic5 = null; 
         Image Myimg5 = null; 

if (requestPic5 != null) 
    { 
     responsePic5 = requestPic5.GetResponse(); 
     if (responsePic5 != null) 
     { 
      Myimg5 = Image.FromStream(responsePic5.GetResponseStream()); 
      } 
    } 

sein Scheitern zu erhalten, wenn Myimg5 = Image.FromStream(responsePic5.GetResponseStream()); eine Ausnahme auslöst, aber das Bild ist immer noch da in der URL

Aber leider die meiste Zeit Laden seine nicht richtig und manchmal werfen 404 Fehler

+0

Wie sehen die rohen Inhalte des Streams aus? Sind sie in HTML oder so dekoriert? –

+0

Danke Jacob, die Daten, die ich streamen muss, ist eine PNG-Bilddatei. – raki

+0

Ich dachte, Sie könnten den Stream in das Debug-Fenster ausgeben und sehen, ob es Tags um Ihre Bild-Bytes gäbe. Aber ich habe es gerade getestet und alles hat gut für mich funktioniert. Sind Sie sicher, dass das Bild über eine Webanfrage verfügbar ist? Kannst du dieses Bild versuchen? http://static.net/so/img/logo.png (das Stackoverflow-Logo) und sehen, ob die Dinge funktionieren? –

Antwort

6

Der Antwort-Stream hat andere Sachen, die Sie nicht unbedingt wollen. Sie wollen wirklich nur die Rohdaten der imgage Datei, so können Sie verwenden:

new MemoryStream(new WebClient().DownloadData("http://address/file.ico"));

0

Wahrscheinlich die Webseite ist geschützt gegen heiße Verknüpfung. Da Bilder im Vergleich zu HTML-Seiten groß sind und Websites für ihre verwendete Bandbreite zahlen, ist dies ein Mechanismus zum Schutz von Websites vor bsndwidth-Diebstahl durch andere Websites.

Die Idee besteht darin, eine Art von Authentifizierung zu verwenden und sicherzustellen, dass ein echter Benutzer nach dem Bild fragt. Dies geschieht in der Regel durch Cookies auf der Seite, die das Bild enthält. Sie müssen diese Cookies erhalten und sie mit Ihrer Anfrage senden. Sie müssen Ihrer Anfrage eine CookieContainer hinzufügen, dann die Seite, auf der sich das Bild befindet, anfragen und am Ende das Bild abrufen (dieselbe Anfrage für alle Schritte verwenden, Cookies werden automatisch hinzugefügt und verwendet).