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:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<form action="<c:url value='/leFoto'/>" method="POST" enctype="multipart/form-data">
<input id="nome_arquivo" type="file" name="arquivo" size="127" style="height: 30px;"/>
<button type="submit" style="height: 30px;">Enviar</button>
</form>
</body>
</html>
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( "/" )
public void index()
{
}
@Path( "/leFoto" )
@Post
public void leFoto( UploadedFile arquivo )
throws IOException
{
System.out.println( "--------------------------> arquivo: " + arquivo );
result.nothing();
};
}
[/code]
Ao escolher o arquivo e clicar no submit, o resultado no console é:
--------------------------> 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
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.