Ouvrir en lecture une image Web [Résolu]

zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 12 août 2005 à 10:04 - Dernière réponse : jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 12 août 2005 à 13:20
3
Merci
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....

Merci zigxag 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 12 août 2005 à 10:36
0
Merci
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
Commenter la réponse de jesusonline
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 12 août 2005 à 11:39
0
Merci
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 ?
Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 12 août 2005 à 11:44
0
Merci
non tout est normal :)

oublie pas d'importer system.net


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Commenter la réponse de jesusonline
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 12 août 2005 à 13:28
0
Merci
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
Commenter la réponse de jesusonline
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 17 août 2005 à 16:27
0
Merci
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 ?
Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 17 août 2005 à 16:53
0
Merci
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
Commenter la réponse de jesusonline
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 17 août 2005 à 17:04
0
Merci
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.
Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 17 août 2005 à 17:45
0
Merci
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
Commenter la réponse de jesusonline
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 17 août 2005 à 17:53
0
Merci
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...
Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 17 août 2005 à 17:57
0
Merci
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
Commenter la réponse de jesusonline
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 17 août 2005 à 18:04
0
Merci
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();
Commenter la réponse de zigxag
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 18 août 2005 à 13:59
0
Merci
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 ?
Commenter la réponse de zigxag
zigxag 142 Messages postés jeudi 10 février 2005Date d'inscription 2 octobre 2008 Dernière intervention - 18 août 2005 à 14:46
0
Merci
..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.
Commenter la réponse de zigxag
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 18 août 2005 à 19:10
0
Merci
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
Commenter la réponse de jesusonline

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.