PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 24 → Envoyer une image via webservice
Envoyer une image via webservice
Débuté par Nico, 05 aoû. 2015 17:16 - 17 réponses
Posté le 05 août 2015 - 17:16
Bonjour,

dans une application android l'utilisateur peut prendre une photo avec son smartphone et j'aimerai qu'il puisse l'envoyer sur un serveur pour être sauvegardée et visible dans un extranet le tout via un webservice.

J'ai lu plusieurs sujets à ce propos sur le forum PCSoft ou la solution semble être de passer par une chaine cryptée en base64, le problème est que dans windev mobile EncodeBASE64 ne fonctionne pas.

J'ai tenté de stocker cette image dans un buffer, puis d'enregistrer le contenu du buffer dans une chaine (UTF8VersChaine) de crypter la chaine obtenue avec la fonction crypte et le type de cryptage crypteSécurisé.

Le tout par bien via le webservice et dans mon extranet lorsque je fais les manipulations inverses à savoir :

- décryptage de la chaine
- enregistrement du contenu de la chaine ds un buffer avec ChaineVersUTF8
- enregistrement en base du buffer dans une rubrique de type image, son, ...
- création du fichier avec hExtraitMemo

Résultat, le fichier créé n'est pas lisible.

Auriez-vous une piste ?

Merci
Posté le 05 août 2015 - 17:47
Bonjour Nico,

tu as un exemple complet pour ca dans wxreplication. Mais le principe :

comme encodeage base 64 n'est pas dispo et que les fonctions de
cryptages (anciennes) ne sont pas compatibles entre android et windows,
il faut:
- mettre l'image dans un buffer
- utiliser buffervershexa pour transformer ca en chaine
- puis si tu veux encrypter, utiliser les nouvelles fonctions cryptestandard

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

Disponible : WXShowroom.com, WXReplication (open source)
Bientôt : WXEDM (open source)
Plus d'information sur http://fabriceharari.com


On 8/5/2015 9:16 AM, Nico wrote:
Bonjour,

dans une application android l'utilisateur peut prendre une photo avec
son smartphone et j'aimerai qu'il puisse l'envoyer sur un serveur pour
être sauvegardée et visible dans un extranet le tout via un webservice.

J'ai lu plusieurs sujets à ce propos sur le forum PCSoft ou la solution
semble être de passer par une chaine cryptée en base64, le problème est
que dans windev mobile EncodeBASE64 ne fonctionne pas.

J'ai tenté de stocker cette image dans un buffer, puis d'enregistrer le
contenu du buffer dans une chaine (UTF8VersChaine) de crypter la chaine
obtenue avec la fonction crypte et le type de cryptage crypteSécurisé.

Le tout par bien via le webservice et dans mon extranet lorsque je fais
les manipulations inverses à savoir :

- décryptage de la chaine
- enregistrement du contenu de la chaine ds un buffer avec ChaineVersUTF8
- enregistrement en base du buffer dans une rubrique de type image, son,
...
- création du fichier avec hExtraitMemo

Résultat, le fichier créé n'est pas lisible.

Auriez-vous une piste ?

Merci
Membre enregistré
41 messages
Posté le 05 août 2015 - 19:21
Bonsoir,

Parmi les solutions les plus courantes :
- Bien spécifier le même type de chaine (ANSI ou Unicode) des deux côtés. En effet, WM est nativement en Unicode, WD en ANSI. Il faudra d'un côté ou de l'autre spécifier manuellement le type de chaine. A vous de voir de quel côté vous préférez le faire (soit déclarer une chaine Unicode côté WD, soit une chaine ANSI côté WM)
- La fonction Crypte classique ne donne pas les mêmes résultats sur les différentes plateformes. PC Soft a sorti la fonction CrypteStandard sensée remédier à ce problème, mais je ne l'ai pas testée personnellement.
- Dans le pire des cas, directement passer par un FTP pour faire l'envoi des fichiers. Pas idéal en terme de connexion, mais les traitements "lecture > encodage > base64 > transfert http > unbase64 > decodage > enregistrement" n'ont plus lieu d'être et le "job" se résume à traiter un fichier image classique.

Le problème peut quelques fois être plus sordide que cela, mais on peut commencer par ça. :)

Cordialement,
Membre enregistré
2 962 messages
Popularité : +89 (91 votes)
Posté le 05 août 2015 - 20:18
Posté le 06 août 2015 - 09:56
Merci Fabrice

effectivement j'ai juste eu besoin d'utiliser BufferVersHexa pour que mon code fonctionne. J'ai laissé de côté le cryptage pour le moment.

Merci aux autres également pour vos réponses.

Bonne journée
Posté le 28 septembre 2015 - 16:32
Bonjour,

J'ai vu que tu avais résolu ton problème, mais j'avais une question.

Je fais la même chose que toi (photo du smartphone que j'envoie via un webservice dans une base hf) mais je me contente d'un fchargebuffer dans un buffer que je transmets à mon web service qui à reception l'insére dans une base hf (colonne binaire).

A aucun moment je n'utilise UTF8VersChaine ... quel intérêt dans le cas qui nous intéresse ?

Merci
Posté le 15 novembre 2015 - 17:09
Bonjour Fabrice
Je n'arrive pas à trouver l'exemple dans WXReplication. Peux tu me donner une indication

Merci d'avance
Posté le 15 novembre 2015 - 17:10
Nico Peux tu me montrer ton code coté android et coté webservice.
Merci d'avance
Posté le 15 novembre 2015 - 19:10
Stephane Derrick a utilisé son clavier pour écrire :
Bonjour Fabrice
Je n'arrive pas à trouver l'exemple dans WXReplication. Peux tu me donner une
indication

Merci d'avance


Ah bon ?

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 15 septembre 2017 - 07:10
Bonjour,

J'ai exactement le même souci. Voilà ce que j'ai tenté côté Windev mobile :
bufImage est un buffer
bufImage = imgLogo
stAccount.sImage = BufferVersHexa(bufImage)

Ca, ça part dans un WebService via un buffer sérialisé en xml

Voici le code de récupération côté WebService :
bufImage est un Buffer
bufImage = HexaVersBuffer(stAccount.sImage)
gl_team_account.imgLogo = bufImage


Et mon image ne s'affiche pas, pourtant mon buffer n'est pas vide. En fait j'ai l'impression que ça me renvoie le chemin de l'image et non l'image elle-même.

Pouvez-vous m'aider ?

Merci
Posté le 16 septembre 2017 - 08:08
Je remonte le sujet svp
Merci
Posté le 15 janvier 2018 - 17:26
Zoomeo

J'ai le même problème, pourriez-vous le résoudre? .. comment?

Merci
Victor


---
El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
https://www.avast.com/antivirus
Membre enregistré
1 844 messages
Posté le 16 janvier 2018 - 08:30
Bonjour,

Sujet maintes fois discuté ici, c'est un problème de codage des caractères. WM est en Unicode et Windows en ANSI. Il faut donc transformer la chaine en utf8 à partir de WM et la repasser en ANSI une fois arrivée sur Windows. Voir les fonctions ChaineVersUtf8 et utf8VersChaine.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Posté le 16 janvier 2018 - 10:42
Bonjour,

voici mon code.

Dans Windev Mobile :

L'image est stockée en base dans une rubrique de type image (mémo binaire).

MonWS.sImage = BufferVersHexa(matable.image)


MonWS.sImage est définit dans le webservice Webdev comme une chaine unicode

En réception dans le webservice Webdev :

matable.image= HexaVersBuffer(MaChaineImage)


Et c'est tout, je ne crypte rien je n'en ai pas l'utilité dans ce cas.
Membre enregistré
1 121 messages
Popularité : +3 (3 votes)
Posté le 16 janvier 2018 - 10:48
Une autre astuce consiste à coder l'image en base64 avant l'envoi. Ainsi il n'y a plus de problème d'encodage (ANSI / UNICODE)
Membre enregistré
1 844 messages
Posté le 16 janvier 2018 - 15:05
as-tu comparé tes valeurs hexa au départ et à l'arrivée pour voir si elles sont identiques ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membre enregistré
59 messages
Posté le 26 juin 2019 - 12:21
Bonjour.

je deterre un peu le sujet :

j'ai essayé ça :

https://blogs.pcsoft.fr/fr/exemple-encodage-envoi-fichier-application-android-vers-serveur-web-travers-connexion-internet/143/read.awp

mais ça n'a pas l'air de fonctionner.

quelqu'un a déjà eu le souci ? une piste ?