2010-12-02 30 views
1

J'ai une page JSP et il devrait obtenir toutes les images de la base de données et devrait afficher sur une table. Mon objet resultset 'rs' pointe vers des images. Mon code est comme ceci:Comment récupérer des images de la base de données et les placer sur JSP?

String query = "select image from stock"; 
rst = stmt.executeQuery(query); 
while(rst.next()) 
<% 
<td><img height="89" src=<%rst.getString(1)%></td> 
%> 
    } 

Je sais, getString ne fonctionnera pas pour le type BLOB. J'ai même été utilisé getBinaryStream(), mais pas réussi. Une idée?

Répondre

1
  1. Faire une servlet et mapper, à, disons, /image/*
  2. Utilisez src="image/<%= imageId %>, où imageId est l'identifiant unique de chaque image dans la db
  3. dans le servlet getBinaryStream() et le transférer (par exemple en utilisant IOUtils.copy(..)) à response.getOutputStream()
  4. Réglez le Content-Type à image/jpeg ou image/png (ou quel que soit le type est)
+0

InputStream sImage; octet [] bytearray = nouvel octet [1048576]; \t \t int taille = 0; \t \t sImage = rst.getBinaryStream (2); \t \t response.reset(); \t \t response.setContentType ("image/jpeg"); \t \t while ((size = sImage.read (bytearray))! = -1) { \t \t response.getOutputStream(). Write (partearray, 0, taille); – hemanth

+0

comme ceci j'ai écrit, mais je reçois l'exception "getOutputStream() a déjà été appelée pour cette réponse". – hemanth

+0

@Hermanth - affiche le code complet du servlet en éditant la question originale. Ce n'est pas lisible ici. – Bozho

5

utilisateur la pièce de code suivante pour convertir Blob à l'octet []:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
InputStream in = blob.getBinaryStream(); 
int n = 0; 
while ((n=in.read(buf))>=0) 
{ 
    baos.write(buf, 0, n); 
} 
in.close(); 
byte[] bytes = baos.toByteArray(); 

Utilisez Servlet pour écrire votre image:

if (bytes != null && bytes.length > 0) { 
response.setContentType("image/jpg"); 
response.getOutputStream().write(bytes); 
response.getOutputStream().flush(); 
response.getOutputStream().close(); 
} 

Utilisez retrive votre image en utilisant url demande de servlet en jsp:

<img src="imageDisplayProcess.do?pKey=imageId" width="117" height="160" 
onError="loadImage()" onAbort="loadImage()" /> 

imageDisplayProcess.do?pKey=imageId //should be your image servlet URL 
+0

La conversion de blob en 'byte []' est inutile. Il suffit d'écrire 'getBinaryStream()' à getOutputStream() '. – BalusC

0

Il suffit de mettre le type de réponse que "image/jpg" et récupérer la colonne à l'aide ResultSet

code démo écrit ci-dessous ---

 if(rs.next()){ 
     int len = imgLen.length(); 
     byte [] rb = new byte[len]; 
     InputStream readImg = rs1.getBinaryStream(1); 
     int index=readImg.read(rb, 0, len); 
     response.setContentType("image/jpg"); 
     response.getOutputStream().write(rb,0,len); 
     response.getOutputStream().flush(); 
     }