PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 27 → Transférer une image WEB dans une BD
Transférer une image WEB dans une BD
Started by Jean Turcotte, Jan., 14 2022 11:34 PM - 11 replies
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 14 2022 - 11:34 PM
Bonjour, Mon appli WEB utilise l'API 'domtoimage' pour capturer une portion d'écran vers une Image. Voici en gros mon code JS;
ExtraitZone(alias)
{
var node = document.getElementById(alias);
domtoimage.toPng(node)
.then(function (dataUrl) {
var img = new Image();
img.src = dataUrl;
var srcImage = dataUrl;
alert(srcImage); // Affiche l'image encodée Base64
RenvoyerValeur(srcImage)
})
.catch(function (error) {
console.error('oops, something went wrong!', error);
});
}

voici le code de ma procédure RenvoyerValeur;
Procedure RenvoyerValeur(valeur)
IMG_ImageFinale = valeur // L'image IMG_ImageFinale nous montre La photo capturée.
sRésultat = AJAXExecute(ajouteImage, valeur, "Image1") // Procédure d'ajout dans la BD

Et voici le code de la procédure serveur ajouteImage;
Procedure ajouteImage(bufImagePublicitaire est un Buffer, sNomImage est une chaîne)
// sRes est chaîne = Décode(bufImagePublicitaire, encodeBASE64)
MonImage est une Image
MonImage.Largeur = 400
MonImage.Hauteur = 400
MonImage = dChargeImage(bufImagePublicitaire, imgDéfaut, 400, 400)
HLitRecherchePremier(T_IMAGES_PUBLICITAIRES, sNom, sNomImage)
//si pas htrouve(T_IMAGES_PUBLICITAIRES) ALORS
T_IMAGES_PUBLICITAIRES.sNom = sNomImage
T_IMAGES_PUBLICITAIRES.iImage = MonImage
HAjoute(T_IMAGES_PUBLICITAIRES)
//FIN

J'ai essayé beaucoup de chose mais l'image ne se sauve jamais dans la BD.

Est-ce qu'un programmeur avisé pourrait m'indiquer le chemin svp?
Merci! :)

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
116 messages
Popularité : +24 (28 votes)
Posted on January, 16 2022 - 2:39 PM
Bonjour Jean
Juste pour info ...
Le type de ton champs T_IMAGES_PUBLICITAIRES.iImage est il un buffer binaire ?
Je sauvegarde régulièrement des images dans la DB et je ne rencontre pas ce genre de soucis ;-)
Bien Cordialement
Gemini1961
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 16 2022 - 5:10 PM
Gemini1961 a écrit :
Bonjour Jean
Juste pour info ...
Le type de ton champs T_IMAGES_PUBLICITAIRES.iImage est il un buffer binaire ?
Je sauvegarde régulièrement des images dans la DB et je ne rencontre pas ce genre de soucis
Bien Cordialement
Gemini1961

J'ai créé 2 champs, un binaire et un text, l'image binaire ne se sauvegarde pas mais celle en texte (Base64) se sauvegarde.

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
116 messages
Popularité : +24 (28 votes)
Posted on January, 16 2022 - 10:01 PM
Bonsoir Jean ;-)

...
T_IMAGES_PUBLICITAIRES.sNom = sNomImage
T_IMAGES_PUBLICITAIRES.iImage = dSauveImageJPEG(MonImage,enMémoire)
HAjoute(T_IMAGES_PUBLICITAIRES)
...

Bien cordialement
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 17 2022 - 1:44 AM
Gemini1961 a écrit :
Bonsoir Jean ;-)

...
T_IMAGES_PUBLICITAIRES.sNom = sNomImage
T_IMAGES_PUBLICITAIRES.iImage = dSauveImageJPEG(MonImage,enMémoire)
HAjoute(T_IMAGES_PUBLICITAIRES)
...

Bien cordialement


Bonsoir Gemini, Il doit y avoir quelque chose manquant dans mon code car ça ne fonctionne toujours pas. Voici le code serveur;
Procedure ajouteImage(ImagePublicitaire est une chaîne , sNomImage est une chaîne)

iImageRecu est une Image = ImagePublicitaire

//HLitRecherchePremier(T_IMAGES_PUBLICITAIRES, sNom, sNomImage)
HRAZ(T_IMAGES_PUBLICITAIRES)
T_IMAGES_PUBLICITAIRES.sNom = sNomImage
T_IMAGES_PUBLICITAIRES.iImage = dSauveImageJPEG(iImageRecu, enMémoire)
T_IMAGES_PUBLICITAIRES.bufImage = ImagePublicitaire
SI HAjoute(T_IMAGES_PUBLICITAIRES) = FAUX ALORS
ErreurInfo(errComplet)
FIN

As-tu une idée?

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
116 messages
Popularité : +24 (28 votes)
Posted on January, 17 2022 - 11:51 AM
Bonjour Jean
Essaye de passer par une variable intermédiaire (buffer) afin de pouvoir afficher la taille du buffer image
...
MonBuffer est un buffer = dSauveImageJPEG(iImageRecu, enMémoire)
nTaille est un entier = Taille(MonBuffer)
...
Essaye d'afficher la variable nTaille
...
Cela permettra de savoir sile problème via du HAjoute ;-)
Bien Cordialement
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 17 2022 - 2:03 PM
Juste après le transfert au serveur, le buffer indique >27kb, ce qui me semble correct.

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 17 2022 - 2:08 PM
Apres avoir exécuté le Hajoute, voici ce qu'il y a dans la rubrique iImage;





--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 17 2022 - 2:22 PM
Gemini, je viens de trouver la source de mon probleme, lorsque je passe le buffer directement à la rubrique comme ceci;
HRAZ(T_IMAGES_PUBLICITAIRES)
T_IMAGES_PUBLICITAIRES.sNom = sNomImage
T_IMAGES_PUBLICITAIRES.iImage = ImagePublicitaire // Buffer recu
T_IMAGES_PUBLICITAIRES.bufImage = ImagePublicitaire
SI HAjoute(T_IMAGES_PUBLICITAIRES) = FAUX ALORS
ErreurInfo(errComplet)
FIN

l'Image s'inscrit dans la rubrique et je suis capable de la lire et de la ré-intégrer dans un champ Image, c'est super. Le problème est que je ne vois pas l'image dans le centre de contrôle;



Pourquoi ne puis-je pas voir les images dans le CC?

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Registered member
116 messages
Popularité : +24 (28 votes)
Posted on January, 17 2022 - 2:41 PM
Cela reste un mystère :-)
L'essentiel étant que ton problème soit résolu :-)
De mon côté afin d'optimiser la DB je compresse mon buffer photo avant HAjoute et je le décompresse avant de le lié au champ image :-)
Bon continuation :-)
Gemini1961
Registered member
240 messages
Popularité : +20 (20 votes)
Posted on January, 17 2022 - 3:22 PM
Jean Turcotte a écrit :
Pourquoi ne puis-je pas voir les images dans le CC?

Parce que l'image est encodée en base64, il faut prendre la partie data du buffer et la décoder avant de l'enregistrer
Dans ton cas le buffer doit ressembler a cela
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASMAAADVCAYAAAAcnJadAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQmUFNW5x

La data codée commence ici au caractère 23, donc pour enregistrer l'image an base de données
Decode(ImagePublicitaire[[23 À ]],encodeBASE64)
Registered member
799 messages
Popularité : +8 (8 votes)
Posted on January, 17 2022 - 5:50 PM
stef1811 a écrit :
Jean Turcotte a écrit :
Pourquoi ne puis-je pas voir les images dans le CC?

Parce que l'image est encodée en base64, il faut prendre la partie data du buffer et la décoder avant de l'enregistrer
Dans ton cas le buffer doit ressembler a cela
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASMAAADVCAYAAAAcnJadAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnQmUFNW5x

La data codée commence ici au caractère 23, donc pour enregistrer l'image an base de données
Decode(ImagePublicitaire[[23 À ]],encodeBASE64)

Bonjour Stef, merci pour l'info. J'ai modifié mon code et c'était plutôt le caractère 24 mais ça fonctionne et je vois maintenant les images. La seule problématique maintenant est que l'image ainsi décodée pèse 2 fois plus lourd dans la BD que celle encodée.

--
Jean Turcotte
WX 27
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram