Ouvrir en lecture une image Web

Résolu
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 - 12 août 2005 à 10:04
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 18 août 2005 à 19:10
Bonjour !
Je voudrais récupérer une image qui se trouve à une URL donnée, afin de pouvoir l'insérer dans SQLServer. J'ai essayé de faire ceci :
Stream imgStream = File.Open(_ImageURL, FileMode.Open, FileAccess.Read);
mais ca ne marche pas... Une exception est vevée disant "Les formats URI ne sont pas pris en charge". Je programme en C#; savez vous comment faire ?

Merci d'avance !

15 réponses

zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
12 août 2005 à 13:20
On me propose une autre solution, qui parait bien plus simple :

System.Net.WebClient webclient = new WebClient();

byte[] imageBytes = webclient.DownloadData (_ImageURL);

Et je me retrouve avec un tableau de bytes....
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 août 2005 à 10:36
Comme ca c'est pas possible, il faut que tu te serves de la classe System.web et des méthodes httpRequest.

T'as de la chance j'ai justement un bout de code qui me permet de savoir si une URL est bonne ou pas

Dim RTN As String = String.Empty


Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)
oRequest.UserAgent = "MyUserAgent"
oRequest.Timeout = TimeOut


Dim oResponse As HttpWebResponse
Try
oResponse = oRequest.GetResponse
If Not oResponse.StatusCode = HttpStatusCode.OK Then
RTN = CInt(oResponse.StatusCode) & " - " & oResponse.StatusCode.ToString
Else
RTN = "OK"
End If


Catch ex1 As WebException
RTN = CInt(ex1.Status) & " - " & ex1.Status.ToString
Catch ex As Exception
RTN = "Pas normal"
End Try
oRequest = Nothing

Aprés tu trouveras un stream dans Oresponse que tu pourras enregistrer dans la base avec un code que j'ai recemment posté sur ce site :)



<HR>



http://blogs.developpeur.org/cyril/ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
12 août 2005 à 11:39
Merci !!
Il n'y aurait pas une confusion entre les HttpWebRequest et les WebRequest, dans ton code ?
Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)

...car la méthode Create renvoi un WebRequest que tu affecte à un HttpWebRequest... c'est normal docteur ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 août 2005 à 11:44
non tout est normal :)

oublie pas d'importer system.net


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 août 2005 à 13:28
C'est vrai que cette méthode est beaucoup plus simple :p

Je connaissais pas, mais c'est toujours bon à savoir :)

Mais épuré ma solution se resume a


Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)

Dim oResponse As HttpWebResponse
oResponse = oRequest.GetResponse

Et j'ai beaucoup plus de donnée sur la réponse qui m'a été envoyé, dans ton cas si tu tombes sur une 404 je ne sais pas si ca ca va lancer une exception (je pense que oui) ou autre :)

En tout cas dans ton cas le code que tu proposes est beaucoup plus adapté que le mien :)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 16:27
Ah mais il y a une erreur de "Violation du protocole HTTP". En effet, l'url n'est pas une URL classique, mais elle est ainsi : http://192.168.0.150/cgi-bin/jpg/image.cgi?resolution=&compression=
Lorsqu'on se rend à cette adresse, une image est générée à la volée et est affichée dans le navigateur. Or, c'est cette image que mon application doit récuperer.
Le code que tu m'a fourni ainsi que celui que je t'ai copié marchent bien avec une adresse "classique" pointant vers un fichier JPG. Mais ils ne marchent pas dans mon cas...
Tu aurais une solution ?
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 août 2005 à 16:53
hum ...

c'est pas normal ca, car en fait l'url renvoie bien un tableau de byte donc noramelement tu dois pouvoir recuperer le bordel, tu peux me dire un peu plus précisement ou t'as l'erreur ?

le code plus haut (le premier) je l'ai justement fait car j'avais une erreur lors de ma requete (500) donc ca me levé une exception, et j'ai pu recuperé le code html de l'erreur, bref l'erreur etait car il n'y avait pas de user agent (et le site se servait du user agent, mais ne vérifiait pas s'il etait vide (je ne cite pas le site en question ca risquerait de ternir l'image du site sur lequel on se trouve ;))) donc peut etre que toi aussi, ou sinon peut etre que t'as besoin d'etre authentifié ou de passer des paramètres a ton url etc...

si tu ouvres un navigateur sur l'adresse de l'image ca fonctionne ? et l'erreur que tu as, tu peux m'en dire un peu plus ?


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 17:04
Voici mon code, en C# :


System.Net.WebClient webclient =
new WebClient();

byte[] imageBytes = webclient.DownloadData (http://site/images/visu_dolcevita.gif);

Celui ci marche micke : j'obtient un tableau de bytes correspondant à l'image...
Maintenant, avec l'URL que je veux utiliser :

System.Net.WebClient webclient = new WebClient();

byte[] imageBytes = webclient.DownloadData (http://192.168.0.150/cgi-bin/jpg/image.cgi?resolution=&compression=);

Ce code plante au niveau de la méthode DownloadData. Une exception est levée disant : "La connexion sous-jacente a été fermée : Le serveur a commis une violation de protocole HTTP".
Cette adresse est en fait l'adresse réseau d'une webcam retournant une image "snapshot". Cette image JPG est donc générée à la volée. Les paramètres de l'URL ne sont pas importants et peuvent être omis.
Merci pour ton aide en tout cas.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 août 2005 à 17:45
Si tu fais avec ma méthode ca devrait te lancer une exception

dans le ex tu dois pouvoir recuperer le stream de la réponse peut etre que t'auras plus d'info la dessus, sinon il doit surement manquer des paramètres :s

c'est bizarre comme truc


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 17:53
Je ne pense pas que ce soit à cause des paramètres (tu veux bien parler des paramètres de l'URL ?) car IE ou firefox affichent bien l'image JPG,eux. J'ai regardé dans le source de la page du navigateur, c'est bien un tableau de bytes qui est récupéré (et que le navigater interprete en affichant l'image)...
Si le navigateur le fait, pourquoi pas le C# ??
dans l'exception, j'ai rien vu de special, à part à un tableau de 49 bytes... Ca fait peu pour une image 320x240...
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
17 août 2005 à 17:57
et t'as pas un message ? pour les paramètres non tu peux aussi en passer par la méthode post ... la je vois pas :/ c'est bizarre

si tu met un user agent ca fait la meme chose ? j'ai aucune idée de quoi ca peut venir, et je peux malheureusement pas regarder pour toi :/

essaye de trouver des infos grace au message d'erreur sur google ..


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
17 août 2005 à 18:04
oui avec un user agent ca fait la meme chose... J'ai regardé sur google mais j'ai rien trouvé...
Dans l'exception, le seul message que j'ai est celui que j'ai écrit plus haut, je vois rien d'autre. bon bah tant pis, merci quand meme pour ton aide ! Je te remet le code, au cas où tu trouverais quelque chose qui cloche... :s


HttpWebRequest oRequest;
oRequest = (HttpWebRequest)WebRequest.Create("http://192.168.0.150/cgi-bin/jpg/image.cgi");
oRequest.UserAgent = "Cosac";
HttpWebResponse oResponse;
oResponse = (HttpWebResponse)oRequest.GetResponse();
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
18 août 2005 à 13:59
Ah mais j'ai un peu compris : je viole le protocole HTTP car la page appelée n'est pas une page HTML. Donc les méthodes HTTPWebRequest et GetResponse ne peuvent pas être utilisées.
Cette URL que je veux atteindre renvoi un tableau de bytes correspondant à une image. Les navigateurs l'interpretent mais la page renvoyée ne contient pas du tout une entete HTTP classique...
Donc ma nouvelle question : comment récupérer le tableau de bytes qui se trouve à cette url : http://192.168.0.150/cgi-bin/jpg/image.cgi ?
0
zigxag Messages postés 142 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 2 octobre 2008 12
18 août 2005 à 14:46
..heu, l'URL serait plutot du type : http://192.168.0.150/cgi-bin/jpg/image.cgi?image.jpeg afin de récupérer directement le résultat du script cgi.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
18 août 2005 à 19:10
je pense qu'il va falloir que tu passes par des socket & co mais la c'est trop compliqué pour moi :/

va faire un tour du coté de Csharpfr peut etre qu'ils pourront t'en dire plus :)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
Rejoignez-nous