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++Builder Discussion :

[Berlin] Envoi d'une image d'un serveur vers un client


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 102
    Points
    102
    Par défaut [Berlin] Envoi d'une image d'un serveur vers un client
    Bonjour,

    Je voudrais savoir si qqu'un connaît un exemple C++ d'envoi d'une image d'un serveur REST vers un client REST ?

    j'ai bien trouvé un exemple Delphi inverse : Envoi d'une image d'un client vers un serveur, mais je ne suis pas parvenu à le porter en C++. voici l'exemple :

    Coté client :

    Code delphi : 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
    var
      jsonObj: TJSONObject;
      mStream: TMemoryStream;
      jsonArray: TJSONArray;
      aParam: TRESTRequestParameter;
    begin
      jsonObj := TJSONObject.Create;
      try
        mStream := TMemoryStream.Create;
        try
          imag1.Bitmap.SaveToStream(mStream);
          mStream.Position := 0;
          jsonArray := TDBXJSONTools.StreamToJSON(mStream, 0, mStream.Size);
        finally
          mStream.Free;
        end;
        try
          jsonObj.AddPair('file', jsonArray);
        except
          jsonArray.Free;
          raise;
        end;
        RESTRequest1.Params.Clear;
        aParam := RESTRequest1.Params.AddItem;
        aParam.Value := jsonObj.ToString;
        aParam.ContentType := ctAPPLICATION_JSON;
      finally
        jsonObj.Free;
      end;
      RESTRequest1.method := rmPost
      RESTRequest1.Resource := 'UploadImage';
      RESTRequest1.Execute;
    end;

    Coté serveur :

    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure updateUploadImage(jsonResult: TJSONObject):
    var
      TempStream: TStream;
    begin
      TempStream := TDBXJSONTools.JSONToStream(jsonResult.Get('file').JsonValue 
    as TJSONArray);
      try
        TBlobField(tblScanDetails.FieldByName('ScanDocument')).LoadFromStream(TempStream);
      finally
        TempStream.Free;
      end;
    end;

    Carmichael

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 102
    Points
    102
    Par défaut
    Bonjour,


    Merci de votre réponse. Je n'ai exploité le résultat qu'aujourd'hui (16/07/2016).

    Ceci fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UnicodeString URL = "http://192.168.1.5:8082/Paysage.png";
     System::Classes::TMemoryStream* ResponseContent = new System::Classes::TMemoryStream;
     IdHTTP1->Get(URL, ResponseContent); // Téléchargement de l'image
     try
    	{Image1->Bitmap = new Fmx::Graphics::TBitmap(ResponseContent);
    	}
     __finally
    	{ delete ResponseContent;
    	} ;
     Image1->Bitmap->SaveToFile("Paysage.png");
    Avec C++ Builder 10.1 , on est obligé de modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1->Bitmap = new Fmx::Types::TBitmap(ResponseContent);
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1->Bitmap = new Fmx::Graphics::TBitmap(ResponseContent);
    Maintenant si on essaie ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UnicodeString LUrl = "http://192.168.1.5:8082/Paysage.png";
    System::Classes::TMemoryStream* LStream = NULL;
    try
    {
        LStream = new System::Classes::TMemoryStream();
        Rest::Client::TDownloadURL::DownloadRawBytes(LUrl, LStream);
        Image1->Bitmap->LoadFromStream(LStream);
    }
    __finally
    {
        delete LStream;
    }
    On tombe sur une épouvantable erreur à l'execution (la compilation est ok) :
    Erreur détaillée d'IIS 10.0 - 406.0 - not Acceptable
    Je ne vois pas comment la corriger.

    Si vous avez des pistes, je suis preneur.

    Cordialement

    Carmicahel

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    La semaine dernière j'aidais un amis pour le téléchargement d'un fichier sous Berlin 10.1 et l'utilisation de DownloadRawBytes provoquais cette exception: No mapping for the Unicode character exists in the target multi-byte code page

    Je n'ai pas bien compris pourquoi ce problème arrive. J'ai finalement décidé d'utiliser Indy
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

Discussions similaires

  1. envoie de fichier binaire d'un serveur vers le client dans axis2
    Par ulrichnansi dans le forum Services Web
    Réponses: 2
    Dernier message: 21/04/2011, 11h31
  2. Envois d'une image de serveur a navigateur
    Par wildthing dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 17/04/2010, 20h30
  3. Réponses: 9
    Dernier message: 17/09/2009, 10h31
  4. Envoi d'une image sur un serveur + update table
    Par rickways dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/06/2007, 20h15

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