Ola galera, eu tenho um JSP que ele le uma imagem do banco de dados e a grava em disco para ai sim eu fazer um , gostaria de saber como eu poderia visualizar a imagem sem ter que grava-la em disco grato.
Imagem .png no banco de dados visualizar na aplicacao WEB
7 Respostas
FileInputStream in = new FileInputStream("/home/rodrigo/imagem.jpg");
ServletOutputStream op = getServletResponse().getOutputStream();
int next;
while ((next = getInputStream().read()) != -1){
op.write(next);
}
op.flush();
op.close();
}
}
Talvez assim vai, testa ai.
opa Rodrigo obrigado pela resposta, bom mais acho que nao fui claro… 
eu nao quero ler a imagem do disco… no caso isso ja estou fazendo, eu nao quero pois… eu retiro do banco de dados a imagem e coloco ela no meu .WAR
SELECT lo_export(imagem,'/caminhoServidor/.War/img.png') FROM alive_portal WHERE codigo = '1'
eu nao quero usar lo_export gostaria de deixar a imagem em memoria e apartir do codigo aparecer a imagem no JSP
ResultSet rs = ...; //O resultado da sua consulta ao banco
Blob b = rs.getBlob(1); //Recupera o conteúdo da imagem, em bytes
byte[] img = b.getBytes(0, b.length()); //Transforma o BLOB num array de bytes
resp.setContentType("image/png"); //Não tenho certeza se o content type é esse mesmo
resp.getOutputStream().write(b); //Escreve os bytes na stream de resposta
resp.getOutputStream().flush();
Acho que é isso...
[]´s
asaudate obrigado cara, estou indo para faculdade agora, quando volta no trabalho eu testo vlw
Blob b = rs.getBlob(1); //Recupera o conteúdo da imagem, em bytes
pois o erro comeca ai,
<%@page language="java" import="org.apache.commons.fileupload.*, java.util.*, java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="org.postgresql.Driver" %>
<%
String url = "jdbc:postgresql://xxx.xxx.x.xxx:5432/alive";
String username = "xxxxxx";
String password = "xxxxxxxx";
String r = "";
String SQL = "select imagem from alive_portal where codigo = '0'";
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
Connection con = null;
try {
con = DriverManager.getConnection(url, username, password);
} catch (SQLException se) {
se.printStackTrace();
}
Statement stm = null;
stm = con.createStatement();
ResultSet rs = stm.executeQuery(SQL);
Blob b = rs.getBlob(1); //Recupera o conteúdo da imagem, em bytes
byte[] img = b.getBytes(0, (int)b.length());
try
{
con.close();
}
catch(SQLException onConClose)
{
onConClose.printStackTrace();
}
%>
<img src="<%= b %>">
A estrutura que eu te passei é pra ser usada num servlet (pois você precisa setar o tipo de conteúdo). No src da imagem , portanto, você deve colocar o caminho do servlet. Além do mais, o campo “imagem” é do tipo BLOB? (Assumí que fosse).
Note que na linha
<img src="<%= b %>">
você está colocando como se o source fosse o blob, diretamente extraído do banco (o que, obviamente, não vai funcionar, já que marcação em HTML ainda não dá suporte a JDBC
)
Tente criar um servlet com o código que te passei (e verifique se o campo é do tipo BLOB) e depois avise se não funcionar, OK ?
[]´s
eu usei assim
create domain lo as oid; *
CREATE TABLE imagem
(
codigo varchar(30) NOT NULL,
imagem lo,
PRIMARY KEY (nome)
)
eh que estou iniciando banco de dados e portlets.... nao tenho muito conhecimento, ao sei se criando o campo assim eh um campo blob