2010-11-24 41 views
1

J'ai stocké une image dans une base de données en utilisant le type Blob. Maintenant, je peux aller chercher cette image de la base de données en utilisant le select. Je veux afficher cette image sur mon jsp. En Jsp j'ai créé une table et je veux que ce soit l'une des colonnes.Conversion d'un objet blob en image

J'ai des données BLOB comment puis-je le convertir en une image et l'afficher sur ma page jsp.

Merci

+0

duplication possible de [Comment récupérer et afficher des images d'une base de données dans une page JSP?] (Http://stackoverflow.com/questions/2340406/how-to-retrieve-and-display-images-from-a -database-in-a-jsp-page) – KNU

Répondre

0

Voici deux options:

Option 1:

Cela peut ne pas être la meilleure réponse, mais il le fera dans un pincement ...

Vous auriez besoin pour utiliser un InputStreamReader pour lire le blob hors de la colonne, puis créez un FileOutputStream puis créez le fichier dans un répertoire d'images 'créé'. Par exemple, si vous stockez vos fichiers image dans un répertoire appelé /pics, vous pouvez écrire les fichiers dans un répertoire appelé /pics/generated.

Cette approche présente certains inconvénients. Pour un, vous générez un fichier chaque fois que la page est demandée. ce qui peut fonctionner si les fichiers auront tous des noms différents.

Option 2:

Vous utilisez un InputStreamReader pour lire le blob de la ligne qui est retournée à partir de votre SQL. Créez un OutputStream en utilisant un byte[] comme destination du flux. Ensuite, il est juste une question d'écrire l'byte[] vers votre JSP

+0

Merci après 4 heures j'ai enfin terminé. Le problème n'était pas de créer le fichier à partir de byte [], mais de l'afficher à l'écran. Coz si je l'enregistre sur mon C: \ je ne suis pas capable de l'utiliser, donc j'ai aussi obtenu le chemin du contexte et tous utilisé ie "this.getServletContext(). GetRealPath ("/Soccer ")" et cela a stocké l'image générée dans le dossier web. Maintenant, je pourrais accéder à ces pic générés .... Ouf ..... – Ace

+0

@ Ace Excellent travail, je vais garder cela à l'esprit la prochaine fois que je dois faire la même chose. – bakoyaro

1

juste obtenir un InputStream du blob en utilisant ResultSet#getBinaryStream() et écrire immédiatement au OutputStream de la réponse HTTP le long d'un ensemble correct des en-têtes. Il n'y a absolument pas besoin de le stocker temporairement sur le disque comme suggéré dans une autre réponse.

Plus de détails et un exemple de code complet peuvent être trouvés dans this answer.