Como insertar, recuperar y mostrar una imagen con servlets y sqlserver
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>");
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>");
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.
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).