PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 04/05/2012 01:53:58

totolosc1
Membre

conversion image bytea

résolu !

Dernière modification par totolosc1 (07/05/2012 16:29:14)

Hors ligne

#2 04/05/2012 10:55:07

rjuju
Administrateur

Re : conversion image bytea

A première vu ça me semble correct, mais je ne suis pas expert en pg/php.

Avez-vous vérifié qu'il y a bien des données dans le champs picture ?

Sinon vous pouvez également enlever le header() dans le fichier image.php et essayer de l'appeler avec un paramètre en dur (le $_GET['id'] ) voir si les données s'affichent bien sur la page, ou guetter d'éventuelles erreurs dans les fichiers logs.

Hors ligne

#3 04/05/2012 11:06:34

totolosc1
Membre

Re : conversion image bytea

Merci pour votre réponse rjuju.

Oui j'ai vérifié pour le champ picture, tout est correct au niveau des données c'est pour ça que je ne comprends vraiment pas.
J'ai également essayé de l'appeler sans le header(), et il y a bien ma ligne d'octets qui apparaît..

Hors ligne

#4 04/05/2012 11:17:32

rjuju
Administrateur

Re : conversion image bytea

Peut-être manque-t-il d'autres headers ?
Par exemple header('Content-transfer-encoding: binary');
Ou alors vérifiez qu'il n'y a aucun affichage avant le header (ne serait-ce qu'un retour chariot).

Hors ligne

#5 04/05/2012 11:50:51

totolosc1
Membre

Re : conversion image bytea

Je viens d'essayer avec le header('Content-transfer-encoding: binary'); mais ça ne change rien.
Comment puis-je faire pour vérifier qu'il n'y ait aucun affichage avant le header ? Car quand je charge ma page et que je souhaite afficher le code source, c'est impossible, certainement parce qu'il prend bien en compte que c'est une image..

Hors ligne

#6 04/05/2012 11:57:02

Marc Cousin
Membre

Re : conversion image bytea

Vous pouvez soit utiliser une extension de votre navigateur qui vous l'affichera (je ne sais pas trop faire cette méthode), soit la méthode «de sauvage», à savoir faire un dump de ce qui passe sur le réseau. wireshark fait ça très bien, par exemple.


Marc.

Hors ligne

#7 04/05/2012 12:03:48

totolosc1
Membre

Re : conversion image bytea

Merci Marc Cousin, je vais me renseigner sur cette méthode avec wireshark alors.

edit : j'ai vérifié, le header est bien pris en compte comme il faut

Dernière modification par totolosc1 (04/05/2012 13:00:09)

Hors ligne

#8 04/05/2012 14:31:58

totolosc1
Membre

Re : conversion image bytea

je me suis aperçu que le résultat que j'envoie dans la base de donnée, est différent de celui que je récupère, je m'explique :
le début de ce que j'envoie dans la base de donnée (dans la colonne picture de type bytea) ressemble à ceci :
\211PNG\015\012\032\012\000\000\000\015IHDR\000\000\001\000\000\000\001\000\010\006\000\000\000\\

or quand je récupère ce résultat sans le reconvertir avec pg_unescape_bytea (donc le résultat doit être identique au précèdent), j'obtiens ceci :
\x89504e470d0a1a0a0000000d49484452000001000000010008060000005c72a8

ce n'est pas logique si ?

Hors ligne

#9 04/05/2012 15:00:12

rjuju
Administrateur

Re : conversion image bytea

Cela doit être lié à la gestion des types binaires :
http://docs.postgresqlfr.org/9.1/datatype-binary.html
Vous pouvez regarder du coté du paramètre bytea_output, ou de la fonction encode() selon le format que vous utilisez.

Hors ligne

#10 04/05/2012 17:53:21

totolosc1
Membre

Re : conversion image bytea

merci rjuju !!
ça fonctionne maintenant ! Il fallait bel et bien que je définisse le format de bytea_output.
Merci encore !

Hors ligne

#11 07/06/2012 16:34:42

samad
Membre

Re : conversion image bytea

??!!!

Hors ligne

#12 08/06/2012 10:43:51

kenrio
Membre

Re : conversion image bytea

c'est nouveau d'effacer la question quand la réponse a été donné ?

Hors ligne

#13 08/06/2012 11:33:11

rjuju
Administrateur

Re : conversion image bytea

Effectivement pas très cool.
De mémoire la question était sur un script php de type image.php?id=num
Le script faisait un select sur un champ bytea d'une table postgres où étaient stockées les images avec les fonctions classiques php :

header('Content-transfer-encoding: binary');
$conn = pg_pconnect(...);
$result = pg_query($conn, "SELECT image from table where id = ".$_GET['id']);
$row = pg_fetch_array($result);
print($row[0]);
pg_close($conn);


(le code ici est un exemple non testé)
et l'image n'était au final pas affichée.
Changer le paramètre bytea_output entre 'hex' et 'escape' a résolu le problème.

Dernière modification par rjuju (08/06/2012 11:33:44)

Hors ligne

#14 12/06/2012 17:29:14

Marc Cousin
Membre

Re : conversion image bytea

Au passage, pour php, je ne sais pas, pour java, le mieux, quand c'est possible, c'est de mettre à jour le driver jdbc, pour qu'il comprenne le format hex (il est plus performant).


Marc.

Hors ligne

Pied de page des forums