Ler uma imagem (BLOB) no MySQ, enviá-la para o JSP usando o VRaptor, e mostrá-la no JSP

Caros, pesquisei aqui no guj e não encontrei uma resposta para algo que me pareceu relativamente simples:

1.Tenho uma imagem salva no MySQL, num campo tipo Byte[] na entidade (ou BLOB no MySQL).
2. Leio esse campo para o controller (@Path( “/img” ) usando algo como ‘user.getImage()’, que retorna o tipo Byte[]. Até aqui, tudo bem.
3. Porém, não sei qual o método adequado para enviar o resultado para o jsp usando o VRaptor, nem como pegar esse resultado no jsp e mostrá-lo como imagem. Na verdade, não sei nem se a solução é nessa direção.

Peguei vários exemplos na internet mas que não usam o VRaptor. Usam scriptlets e coisas do gênero. Os demais exemplos que encontrei com o VRaptor são sempre para o ‘upload’, que não é o meu caso, por enquanto, pois as imagens já estão armazenadas no banco.

Alguém teria um exemplo de código ( controller + jsp ) sobre como fazer isso?

Grato antecipadamente,

Almir.

melhor jeito: crie uma outra lógica só pra mostrar essa imagem:

@Path("/usuario/{id}/img")
public Download imagem(Long id) {
     Usuario usuario = carrega(id);
     return new ByteArrayDownload(usuario.getImage(), "image/png", "algum nome");
}

e na jsp é só fazer uma img apontando pra aí.

<img src="/contexto/usuario/${usuario.id}/img"/>

Caríssimo Lucas, mais uma vez grato pela pronta e competente resposta. Deu tudo certo.

Abraços,
Almir.

Lucas e demais participantes.

Realmente, tudo estava bem, até que tentei fazer o upload de um arquivo. Eu já havia feito isso em outro sistema e funcionou perfeitamente, mas agora o ‘UploadedFile arquivo’ recebe um ‘null’ ao invés do arquivo enviado. Não há nenhum erro de compilação e o programa executa normalmente. Já vasculhei o código e não consegui encontrar o erro.

Eis o jsp:

&lt;%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;
&lt;%@page contentType="text/html" pageEncoding="UTF-8"%&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;JSP Page&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Hello World!&lt;/h1&gt;
		&lt;form action="&lt;c:url value='/leFoto'/&gt;" method="POST" enctype="multipart/form-data"&gt;
			&lt;input id="nome_arquivo" type="file" name="arquivo" size="127" style="height: 30px;"/&gt;
			&lt;button type="submit" style="height: 30px;"&gt;Enviar&lt;/button&gt;
		&lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;

Eis o Controller:

[code]package z8.controller;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import java.io.*;

@Resource
public class IndexController
{

private final Result result;

public IndexController(
	Result result )
{
	this.result = result;

}

@Path( &quot;/&quot; )
public void index()
{
}

@Path( &quot;/leFoto&quot; )
@Post
public void leFoto( UploadedFile arquivo )
	throws IOException
{
	System.out.println( &quot;--------------------------&gt; arquivo: &quot; + arquivo );
	result.nothing();
};

}
[/code]

Ao escolher o arquivo e clicar no submit, o resultado no console é:

--------------------------&gt; arquivo: null

Grato, mais uma vez.

Almir.

O VRaptor cria um objeto do tipo "UploadedFile"
só pelo trecho:

name="arquivo"

??

sim, d34d_d3v1l… só usar um input file com o mesmo nome do UploadedFile…

Almir, dá uma olhada se o commons-fileupload tá no classpath.

[quote=Lucas Cavalcanti]sim, d34d_d3v1l… só usar um input file com o mesmo nome do UploadedFile…

Almir, dá uma olhada se o commons-fileupload tá no classpath.[/quote]

VRaptor .é. show de bola :slight_smile:
abraços

Lucas e demais participantes,

Por favor, desculpem a demora em dar um retorno.

Lucas, mais uma vez você foi direto ao ponto: faltava o commons-fileupload.

Grato!

Abraço,
Almir.