2009-10-02 21 views
5

Próbuję wyświetlić obraz w "toolStrip" i C# z poziomu strony internetowej. Używam następujący methode aby uzyskać obrazŁadowanie obrazu wC# z adresu URL strony internetowej

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()); 
      } 
    } 

jego wadą gdy Myimg5 = Image.FromStream(responsePic5.GetResponseStream()); zgłasza wyjątek, ale obraz jest nadal w url

Ale niestety większość czasu jej nie ładuje poprawnie, a czasami rzuca Błąd 404

+0

Jak wygląda nieprzetworzona zawartość strumienia? Czy są one udekorowane w HTML czy coś takiego? –

+0

Dzięki Jacob, dane potrzebne do przesyłania strumieniowego to plik obrazu png. – raki

+0

Myślałem, że możesz wyprowadzić strumień do okna debugowania i sprawdzić, czy wokół bajtów obrazu znajdują się znaczniki. Ale, po prostu przetestowałem to i wszystko działało dobrze dla mnie. Czy jesteś pewien, że obraz jest dostępny dla ciebie za pośrednictwem webquestu? Czy możesz spróbować tego obrazu? http://sstatic.net/so/img/logo.png (logo stackoverflow) i sprawdź, czy wszystko działa? –

Odpowiedz

6

Strumień odpowiedzi zawiera inne rzeczy, których nie potrzebujesz. Naprawdę po prostu nieprzetworzone dane z pliku imgage, więc można użyć:

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

0

Prawdopodobnie strona jest zabezpieczona przed Hotlink. Ponieważ obrazy mają duży rozmiar w porównaniu ze stronami html i witrynami, które płacą za zużyte pasmo, jest to mechanizm służący do ochrony witryn przed kradzieżą bsndwidth przez inne witryny.

Pomysł polega na użyciu pewnego rodzaju uwierzytelniania i upewnieniu się, że prawdziwy użytkownik prosi o zdjęcie. Zwykle odbywa się to za pomocą plików cookie na stronie, która zawiera obraz. Musisz pobrać te pliki cookie i wysłać je wraz z żądaniem. Musisz dodać do swojego żądania numer CookieContainer, a następnie poprosić o stronę, na której znajduje się obraz, a na koniec pobrać obraz (użyj tego samego żądania dla wszystkich kroków, pliki cookie zostaną dodane i użyte automatycznie).

Powiązane problemy