quinta-feira, 6 de maio de 2010

App Engine + Wicket - Exibindo Imagens Armazenadas em Blob

O cenário aqui é: Você está usando o App Engine do Google e está armazenando sua imagem em um Blog da camada de persistência deles.

Você não pode usar as imagens que foram enviadas pelos usuários diretamente porque o AppEngine não permite acesso a disco. A não ser que você use uma API mágica que uma alma caridosa criou, que simula um file system no App Engine. Eu não testei essa API, então tive que colocar no Blog da API de datastore mesmo.

Agora você quer exibir esta imagem na tela, como faz? (#comofaz) Faz assim oh!

Coloca no seu HTML a tag abaixo:

<img wicket:id="imagem"/>

E depois, na sua classe você faz da seguinte forma


DynamicImageResource dir = new DynamicImageResource("jpg") {
    @Override
    protected byte[] getImageData() {
        return produto.getImagem().getBytes();
    }
};           
Image img = new Image("imagem",dir);
add(img);


As classes que você precisa importar são:
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.image.resource.DynamicImageResource;

Onde está escrito produto no código acima você deve entender como um objeto persistente no AppEngine que tem uma propriedade imagem do tipo Blob (google.appengine.api.datastore.Blob)