IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Transférer une image de c# vers une page web [3.5]


Sujet :

C#

  1. #1
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut Transférer une image de c# vers une page web [3.5]
    Bonjour à tous,

    Je recherche le moyen de transférer une image ( enfin le flux d'une image, en byte[] ) vers une page web, via HTTP

    Mon code actuel C# ressemble grossièrement au suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public string UploadPicture(string url, byte[] content)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.ContentType = "application/octet-stream";
                request.Method = "POST";
     
                byte[] param = Encoding.GetEncoding(shopEncoding).GetBytes("source-byte=");
                byte[] endOfString = Encoding.GetEncoding(shopEncoding).GetBytes("\n");
     
                List<byte> allBytes = new List<byte>();
                for (int i = 0; i < param.Length; i++)
                    allBytes.Add(param[i]);
                for (int i = 0; i < content.Length; i++)
                    allBytes.Add(content[i]);
                for (int i = 0; i < endOfString.Length; i++)
                    allBytes.Add(endOfString[i]);
     
                request.ContentLength = allBytes.Count;
                using (Stream newStream = request.GetRequestStream())
                {
                    newStream.Write(allBytes.ToArray(), 0, allBytes.Count);
                }
     
                string result = string.Empty;
     
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                using (Stream mystream = response.GetResponseStream())
                {
                    using (StreamReader mystreamreader = new StreamReader(mystream, Encoding.GetEncoding(_websiteEncoding)))
                    {
                        result = mystreamreader.ReadToEnd().Replace("\r\n", "\n").Replace("\n", "\r\n");
                    }
                }
     
    return result;
            }
    Le PHP de la page de réception ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $file_name = dirname(__FILE__).'/images-temp/test.jpg';
     
    					$file = fopen( $file_name,'x+' );
    					if( !fwrite( $file,$GLOBALS['HTTP_RAW_POST_DATA']) ) return ;
    					fclose( $file );
    print 'succès';
    L'image "test.jpg" obtenu est cependant illisible...

    Quelqu'un pourrait-il m'aiguiller ? (ou m'avertir si ce que je souhaite faire n'est pas possible !)

    Merci.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Une possiblité :
    Il est possible que l'encoding mette un peu le souk la dedans! En effet il faudrait plutot essayer d'envoyer la photo encodée en base64 (sinon il est possible que des caractères de controle sèment la panique)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 122
    Points
    122
    Par défaut
    WebClient.UploadFile ne te convient pas ?

    Edit : UploadData et autre aussi...

  4. #4
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    En fait, je n'ai pas le fichier, seulement le flux de bytes. Je n'ai pas envie de créer un fichier temporaire que j'enverrais ensuite avec UploadFile(), sauf en dernier recours...

    Je tente d'abord la solution de PitMaverick78, on verra bien...

    Merci à vous deux

  5. #5
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    En utilisant ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    request.ContentType = "application/octet-stream";
    request.Method = "POST";
    request.SendChunked = true;
    request.TransferEncoding = "base64";
     
    request.ContentLength = content.Length;
    using (Stream newStream = request.GetRequestStream())
    {
             newStream.Write(content, 0, content.Length);
    }
     
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    J'ai une exception de type
    Cependant, je ne suis pas sur de la validité des chaînes pour ContentType et TransferEncoding...
    Il n'y aurais pas des constantes c# me donnant les chaînes corrects ? (comme la classe WebRequestMethods.Ftp pour les méthodes FTP)

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Ah mais non mais faut pas faire comme ca
    C'est l'image elle même que tu encodes en base 64. Une fois en base 64, ca va te faire une chaine de caractères(ex: Ym9uam91cg== ). Et c'est ca que tu dois envoyer au serveur en utilisant un encoding ASCII. (Grosso modo, c'est comme si tu zippais ton image pour la faire passer sur le réseau)

    Du côté de ton serveur de réception, c'est la que tu recois tout en ASCII et après tu utilises base64_decode pour à partir de ta chaîne, retrouver ton image.

    http://jasonf-blog.blogspot.com/2005...using-net.html
    http://php.net/manual/en/function.base64-decode.php

  7. #7
    Membre habitué Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Points : 156
    Points
    156
    Par défaut
    Ouai, il me semblait bien que j'avais rien compris ^^

    Au final, j'ai utilisé UploadData, qui m'évite de sauvegarder localement le flux de bytes et... ça marche ! :p

    Merci à vous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Créer une image png à partir d'une image de format quelconque avec Python
    Par bguy4 dans le forum Général Python
    Réponses: 3
    Dernier message: 30/10/2014, 10h49
  2. Réponses: 14
    Dernier message: 23/04/2012, 22h32
  3. Afficher une image par défaut lorsque une image ne s'affiche pas
    Par ne2sbeal dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 10/10/2011, 10h42
  4. Réponses: 3
    Dernier message: 27/11/2008, 17h57
  5. Réponses: 2
    Dernier message: 22/03/2007, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo