Imagem externa

26 views
Skip to first unread message

Ivo Sestren Junior

unread,
May 16, 2013, 12:04:30 PM5/16/13
to caelum-...@googlegroups.com

Boa tarde.

Tenho imagens gravadas em um BD e em um acesso externo também.
Como faço para enviar esta imagem a pagina?

Em PHP faria assim:
No src da imagem utilizaria um link para um script PHP, este script faria o print do binario da imagem.

Como fazer o mesmo com vraptor?

Chico Sokol

unread,
May 16, 2013, 12:37:29 PM5/16/13
to caelum-...@googlegroups.com
Acho que você precisa receber o response injetado, setar o mime type e escrever o binário no corpo do response. Alguém sabe outro jeito?



--
Chico Sokol


2013/5/16 Ivo Sestren Junior <i...@sestren.com.br>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

Jonas Nepomuceno

unread,
May 16, 2013, 2:30:13 PM5/16/13
to caelum-...@googlegroups.com
Gravar a imagem do banco em um arquivo temporário e depois referencia
--
São Paulo Realmente é aquilo que

Lucas Cavalcanti

unread,
May 16, 2013, 3:08:01 PM5/16/13
to caelum-vraptor
ou crie uma rota pra download:

@Resource
public class ImagensController {

    @Get("/imagem/{nomeDaImagem}")
    public Download download(String nomeDaImagem) {
        byte[] imagem = buscaAImagemNoBanco(nomeDaImagem);
        return new ByteArrayDownload(imagem, "image/" + getExtensao(nomeDaImagem), nomeDaImagem);
    }
}

daí é só colocar a url desse controller no <img src="${linkTo[ImagensController].download['meuLogoLegal.png']}" />

ao inves do byte[] dá pra usar InputStream tb.

Ivo Sestren Junior

unread,
May 22, 2013, 1:38:28 PM5/22/13
to caelum-...@googlegroups.com
Consegui resolver desta maneira:

@Get("/visualiza/{camera.name}")
public byte[] visualiza(Camera camera) {
   byte[] imagem = null;
   try {
      URL url = new URL(
             "http://255.255.255.255:8601/Interface/Cameras/GetSnapshot?Camera="
             + camera.getName()
             + "&ResponseFormat=XML&AuthUser=USUARIO&AuthPass=SENHA");

      InputStream openStream = url.openStream();
      imagem = IOUtils.toByteArray(openStream);
      openStream.close();
   } catch (MalformedURLException e) {
      e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
   return imagem;
}


Claro, ainda falta tratar quando der problema no download da imagem.
Mas assim funcionou a exibição da imagem.

Obrigado.


Em 21 de maio de 2013 18:46, Ivo Sestren Junior <i...@sestren.com.br> escreveu:
Hoje que fui implementar este trecho do código.
Mas não esta funcionando, até faz download e envia algo para o browser, mas não é uma imagem.
Ja tentei salvar a imagem e a mesma não abre.

Segue código que utilizei

@Get("/visualiza/{camera.name}")
public Download visualiza(Camera camera) {
   byte[] imagem = null;
   try {
      URL url = new URL("http://255.255.255.255:8601/Interface/Cameras/GetSnapshot?Camera=" + camera.getName() + "&ResponseFormat=XML&AuthUser=USUARIO&AuthPass=SENHA");

       BufferedImage buffer = ImageIO.read(url);
       imagem = ((DataBufferByte) buffer.getData().getDataBuffer()).getData();
   } catch (MalformedURLException e) {
      e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
   return new ByteArrayDownload(imagem, "imagem/jpeg", camera.getName() + ".jpg");
}



A URL esta modificada mesmo, mas havia colocado com os dados reais, ela aponta para uma imagem em JPG.

Faço isto porque o acesso a esta imagem é em um servidor controlado, e preciso exibi-la pelo sistema.


2013/5/16 Lucas Cavalcanti <lucasm...@gmail.com>

Ivo Sestren Junior

unread,
May 21, 2013, 5:46:24 PM5/21/13
to caelum-...@googlegroups.com
Hoje que fui implementar este trecho do código.
Mas não esta funcionando, até faz download e envia algo para o browser, mas não é uma imagem.
Ja tentei salvar a imagem e a mesma não abre.

Segue código que utilizei

@Get("/visualiza/{camera.name}")
public Download visualiza(Camera camera) {
   byte[] imagem = null;
   try {
      URL url = new URL("http://255.255.255.255:8601/Interface/Cameras/GetSnapshot?Camera=" + camera.getName() + "&ResponseFormat=XML&AuthUser=USUARIO&AuthPass=SENHA");

       BufferedImage buffer = ImageIO.read(url);
       imagem = ((DataBufferByte) buffer.getData().getDataBuffer()).getData();
   } catch (MalformedURLException e) {
      e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
   return new ByteArrayDownload(imagem, "imagem/jpeg", camera.getName() + ".jpg");
}



A URL esta modificada mesmo, mas havia colocado com os dados reais, ela aponta para uma imagem em JPG.

Faço isto porque o acesso a esta imagem é em um servidor controlado, e preciso exibi-la pelo sistema.


2013/5/16 Lucas Cavalcanti <lucasm...@gmail.com>
ou crie uma rota pra download:

Otávio Garcia

unread,
May 24, 2013, 4:15:47 PM5/24/13
to caelum-...@googlegroups.com
Use o método do Guava, que já vem padrão com o vraptor.

URL url = ...;
byte[] img = Resources.toByteArray(url);
return new ByteArrayDownload(imagem, "imagem/jpeg", camera.getName() + ".jpg")

Quando ao erro... verifique o URL que você acessa está correto, e se o
conteúdo realmente é JPEG.

2013/5/21 Ivo Sestren Junior <i...@sestren.com.br>:

Raphael Almeida

unread,
May 24, 2013, 5:26:26 PM5/24/13
to caelum-...@googlegroups.com
Cara eu acho q tah errado, em new ByteArrayDownload(imagem, "imagem/jpeg", camera.getName() + ".jpg")

acho q no lugar deveria ser "image/jpeg"

Ivo Sestren Junior

unread,
May 24, 2013, 6:18:21 PM5/24/13
to caelum-...@googlegroups.com
Eu havia tentado desta maneira.
Mas a imagem sempre retornava corrompida para a View.
Mesmo olhando os dados, não tinha nem o cabeçalho JPG.
Reply all
Reply to author
Forward
0 new messages