27 avril 2012
publié par 
Il n'est pas toujours évident de déterminer le bon "codage" permettant de faire transiter des informations sur Internet. Pour acheminer un fichier complet par exemple, il ne faut pas que son contenu entre en conflit avec les caractères interdits par le protocole HTTP.

La fonction URLEncode du WLangage est prévue pour simplifier les transferts de données utilisant HTTP, et évite toute programmation complexe. Voici un exemple d'envoi d'un fichier depuis une application Android, à destination d'une page AWP d'un site WEBDEV. Il s'agit d'une solution parmis d'autres, mais le principe reste dans tous les cas le même :

Code WINDEV Mobile d'envoi d'un fichier, une photo pour l'exemple, à partir d'un bouton d'une application Android :

sAdressePageWEBDEV est une chaîne = "http://www.serveur:port/PAGE_RécupèreFichierSurServeur.awp"

// Prise d'une photo
VidéoParamètre(vipRotationAuto,Vrai)
sPhoto est une chaîne = VidéoLanceAppli(viCaptureImage)

// Récupération du contenu de l'image
bufFichier est un Buffer = fChargeTexte(sPhoto)
// Transformation de l'image en "base 64"
bufFichier = Crypte(bufFichier,"",crypteAucun)
// Encodage afin que tous les caractères soient valides pour le transfert
bufFichier = URLEncode(bufFichier)
// Le nom du fichier est également envoyé à la page
sNomFichier est une chaîne = fExtraitChemin(sPhoto,fFichier+fRépertoire)

// Envoi du fichier à la page WEBDEV
HTTPRequête(sAdressePageWEBDEV,"","","IMAGE="+bufFichier+"&NOM="+sNomFichier)

Code de la page WEBDEV qui récupère sur un serveur le fichier. Il s'agit d'une page sans interface, dont la seule action sera de sauvegarder le fichier reçu en restaurant son format de départ. La page se comporte en quelque sorte comme un Webservice, puisque le mode AWP permettra la libération immédiate de ses ressources dès la fin de l'exécution de son code :

// Code d'initialisation de la page
// Récupération de l'image reçue en paramètre

// le décodage de l'url est automatique
// Il n'est pas nécessaire d'appeler URLDécode
bufFichier est un Buffer = PageParamètre("IMAGE")
sNomFichier est une chaîne = PageParamètre("NOM")
// Du base64 on restaure un buffer avec le contenu initial
bufFichier = Décrypte(bufFichier,"",crypteAucun,encodeBASE64)
fSauveBuffer(fRepDonnées()+["\"]+sNomFichier,bufFichier)

ChaîneAffiche("OK")
FinProgramme()

Cette solution s'applique dans le cas d'un projet Android dont la compilation est faite avec des chaînes de caractères Ansi en exécution :
  • menu "Projet/Gestion des configurations/Description de la configuration courante",
  • volet "Unicode".

A noter que l'utilisation d'une page WEBDEV en mode AWP est très pratique lorsqu'un action unique doit être demandée à un serveur Web. Dès que différentes actions sont requises, l'utilisation d'un Webservice hébergé par le serveur d'application WEBDEV est à privilégier.

< Retour