Como insertar, recuperar y mostrar una imagen con servlets y sqlserver

javier
25 de Mayo del 2005
Hola, estimados expertos en java, reciban un cordial saludo, estoy trabajando con (java servlets, sqlserver, html): getBinaryStream, ImageIcon, byte[], getBytes, getBlob e inputStream.

Mi problema es que no puedo mostrar una imagen mediante un servlet con html y extraerla de la base de datos sql server.

Ejemplo , tengo el siguiente codigo(pero no funciona), ¿que sugerencias me pueden proporcionar?
Esperando contar con su pronta respuesta, reciban mis agradecimientos.

----------------CODIGO--------------------------------------------------------
PreparedStatement psImg = con.prepareStatement("select imagen from imagenes where nombre = ?");

psImg.setString(1,"myimagen.gif");
ResultSet rsImg = psImg.executeQuery();

if (rsImg != null)
{
// String nombreImg = rsImg.getString("nombre");
InputStream is = rsImg.getBinaryStream("imagen");
/*
Blob blob = rsImg.getBlob("imagen");
ImageIcon blobIco = new ImageIcon(blob.getBytes(1, (int)blob.length()));
*/

while (rsImg.next()){
byte[] imgBytes = rsImg.getBytes("imagen");
ImageIcon imgBytesIco = new ImageIcon(imgBytes);


Supuestamente es como mostrar lo que re obtiene de la base de datos....

out.println("<img src="" + rsImg.getBytes("imagen")+ "">");
out.println("<img src="" + imgBytesIco.getImage()+ "">");
out.println("<img src="" + imgBytesIco+ "">");
out.println("<img src="" + imgBytes + "">");
out.println("<input name="imageField" type="image" src="" + rsImg.getBytes("imagen") +"" >");

out.println(rsImg.getBytes("imagen") +"<br>");
out.println( imgBytes +"<br>");
out.println(imgBytesIco.getImage()+"<br>");
out.println(imgBytesIco +"<br>");




H?or Cadavid
25 de Mayo del 2005
Es correcta la manera de hacer la consulta, pero es incorrecta la manera de representarla. No se puede intertar en html los \\'bytes\\' de la imagen. Lo que se debe hacer es crear un servlet cuyo tipo MIME del flujo de salida de su método GET corresponda al formato de la imagen, y luego escribir el flujo de bytes a dicho flujo de salida. Luego, en el código HTML se agrega un <IMG ...> cuyo código fuente sea el URL del servlet.

H?or Cadavid
25 de Mayo del 2005
Hago la aclaración, con el flujo de salida me refiero al httpresponse, para la especificación del formato de salida: setContentType(.... y el nombre del tipo MIME).

thunderbytes
25 de Mayo del 2005
al parecer estas trabajando con Struts. lo que debes de hacer es utilizar la classe FormFile, el cual te recibe tu flujo de bytes y los transforma en un objeto archivo, descriminando el tipo, tamaño que es lo que importa para el manejo de esto.