Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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.
Julien.
https://rjuju.github.io/
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).
Julien.
https://rjuju.github.io/
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.
Julien.
https://rjuju.github.io/
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
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)
Julien.
https://rjuju.github.io/
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
Pages : 1