Exibir BLOB (imagem) via JSP

4 respostas
J

Pessoal, tenho um código para gerar Organograma de funcionários.

As informações (nome, cargo, telefone, foto etc) são carregadas de um bd (SQL Server) e exibidas via JSP.
Exibir os dados já está ok, exceto a imagem .jpg (armazenada no SQL SERVER/campo IMAGE-->BLOB).

Aliás, eu até já consegui exibir a imagem (vide código abaixo), mas não estou conseguindo 'emoldurá-la' no campo definido pelo .css.
Ou seja, a imagem é obtida no resultSet, mas apenas ela é carregada (na página inteira).

Alguém sabe como 'emoldurar' a foto ?

<%
Connection con = FactoryConnection_SQL_SERVER.getConnection("Organograma");
Statement stSuper = con.createStatement();
Statement stSetor = con.createStatement();

Blob image = null;
byte[] imgData = null;

ResultSet rsSuper = stSuper.executeQuery("Select * From funChart where setor = 'mySetor'");

if (rsSuper.next()) {
image = rsSuper.getBlob(12);
imgData = image.getBytes(1, (int) image.length());
response.setContentType("image/gif");
OutputStream o = response.getOutputStream();
//o.write(imgData); // mesmo carregando por aqui, obtemos a imagem na página inteira.
//o.flush();
//o.close();

--[...]

<table style="margin: 0px; margin-top: 15px;">
<tr>
<td id="foto">
    <img title="<%=rsSuper.getString("Nome").trim()%>" src="<%= o.wite(imageData); o.flush(); o.close(); %>" />
</td>
</td>

<td id="dados">
<h3><%=rsSuper.getString("Nome")%></h3>
<p><%=rsSuper.getString("Cargo")%></p>
<p>Matrícula:<br/><%=rsSuper.getString("Chave")%></p>
<p>Telefone:<br/><%=rsSuper.getString("Fone")%></p>
<p>E-Mail:<br/><%=rsSuper.getString("Email")%></p>
</td>
</table>
Esse é o trecho .css para emoldurar a imagem:
#foto
{
    padding: 0px;
    vertical-align: middle;
    text-align: center;
    width: 170px;
    height: 220px;
}

4 Respostas

D

Acesso ao banco em uma JSP?
Um belíssimo exemplo de um código ruim.

Você não define um tamanho para a imagem, por isso ela está ocupando todo espaço disponível.

J

drsmachado:
Acesso ao banco em uma JSP?
Um belíssimo exemplo de um código ruim.

Você não define um tamanho para a imagem, por isso ela está ocupando todo espaço disponível.

drsmachado,

eu também achei esse código horrível ! Se eu fosse fosse desenvolver do zero, faria MVC bonitinho, classes baseadas em framework Collections (LinkedList e TreeMap) e JPA. Mas acredite-me, aqui no meu trabalho não dá, por falta de tempo e ferramentas. Tenho que usar: Notepad++, Tomcat e SQL Server.

Porém, me paasaram esse código e disseram: ‘quero pronto até tal data’. Estimei no meu ‘scrum pessoal’ e concluí que nesse prazo que me deram não dá pra fazer um novo como eu gostaria. Inclusive por isso estou recorrendo a este Forum, para tentar ganhar tempo em resolver o problema.

Agora, deixando essa questão ‘estética’ de lado, a respeito do seu comentário que eu não esteja definindo um tamanho para imagem, acredito que seja esse o problema, sabe por que ?

No src da tag img, se eu definir um path para o arquivo (deixando de carregar do bd), a imagem é carregada como deveria, independente do tamanho dela. Já fiz esse teste e funciona (o único requerimento é que as imagens deverão ter o mesmo tamanho (width x height) para não ficarem distorcidas na moldura definida no .css).

Mas dá muito trabalho ficar gerenciando os arquivos de fotos, visto que a rotatividade de funcis é elevada.

Ou seja, ao invés de receber a imagem de um novo funci por email, renomear o arquivo com a ID dele e copiar para a pasta do setor dele, fiz uma interface onde, após autenticar o user, o mesmo grava sua foto direto no bd, assim como seu telefone e email.

Você sabe me explicar por que você acha que o problema esteja apenas no redimensionamento ? Se possível, me dê um exemplo.

Obrigado pela atenção !

J

A quem interessar, veja a solução aqui:

http://stackoverflow.com/questions/11192020/display-blob-image-through-jsp

J

drsmachado:
Acesso ao banco em uma JSP?
Um belíssimo exemplo de um código ruim.

Você não define um tamanho para a imagem, por isso ela está ocupando todo espaço disponível.

Como eu suspeitava, não era problema de definição de tamanho de imagem.
Se interessar, veja a solução aqui:
http://stackoverflow.com/questions/11192020/display-blob-image-through-jsp
Mesmo assim, obrigado pela atenção.

Criado 25 de junho de 2012
Ultima resposta 25 de jul. de 2012
Respostas 4
Participantes 2