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#

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    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 : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Edit : UploadData et autre aussi...

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    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 confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    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 : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    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

+ 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