E aí, galerinha do GUJ!
Tudo bem com vocês?
Espero que alguém também use essa framework poderosíssima que é o AngularJS e possa me dar uma força, hehe.
Eu busco uma imagem na minha base de dados e retorno um array de bytes para a página. Quero exibir esse array, como uma imagem, em uma tab img, mas não funciona.
Código de busca:
Se você acessar o endereço que retorna a imagem ele exibe a imagem no seu browser?
Eu fiz algo semelhante uma vez (com JQuery + SpringMVC), eu setava o mime type da imagem corretamente e retornava ela pelo controller. Depois eu só jogava o endereço no src da imagem, ao invés de fazer download manualmente…
Nicolas_Fernandes
wagnerfrancisco:
Se você acessar o endereço que retorna a imagem ele exibe a imagem no seu browser?
Eu fiz algo semelhante uma vez (com JQuery + SpringMVC), eu setava o mime type da imagem corretamente e retornava ela pelo controller. Depois eu só jogava o endereço no src da imagem, ao invés de fazer download manualmente…
Na verdade, Wagner, eu não acesso um endereço, e sim retorno uma cadeia de bytes, e esses bytes são o conteúdo da imagem. Talvez, se eu salvar a imagem em um fake path eu consiga esse resultado, mas a ideia original é usar um array de bytes mesmo.
wagnerfrancisco
Nicolas Fernandes:
wagnerfrancisco:
Se você acessar o endereço que retorna a imagem ele exibe a imagem no seu browser?
Eu fiz algo semelhante uma vez (com JQuery + SpringMVC), eu setava o mime type da imagem corretamente e retornava ela pelo controller. Depois eu só jogava o endereço no src da imagem, ao invés de fazer download manualmente…
Na verdade, Wagner, eu não acesso um endereço, e sim retorno uma cadeia de bytes, e esses bytes são o conteúdo da imagem. Talvez, se eu salvar a imagem em um fake path eu consiga esse resultado, mas a ideia original é usar um array de bytes mesmo.
Eu entendi. Quando você acessa o /json/BuscarImagem?id=1 ele te retorna um array de bytes, certo? Se você setar os headers da request corretamente, ao entrar em /json/BuscarImagem?id=1 pelo browser, ele vai exibir a imagem. Deste modo, no html (ou nas diretivas do angular) fica transparente este byte array, você simplesmente acessa como se fosse uma imagem. Sempre que você alterar o elemento src do html ele busca a nova imagem. Com o controller do spring eu fiz o seguinte:
@RequestMapping(value="/produtos/{id}/imagem",method=RequestMethod.GET)publicResponseEntity<byte[]>imagemDoProduto(@PathVariable("id")Longid)throwsIOException{byte[]image=produtoService.imagemDoProduto(id);StringfileName="produto"+id+".jpg";HttpHeadersresponseHeaders=httpHeaderImageFile(fileName,image.length);returnnewResponseEntity<byte[]>(image,responseHeaders,HttpStatus.OK);}// setando os headerspublicstaticHttpHeadershttpHeaderImageFile(finalStringfileName,finalintfileSize){StringencodedFileName=fileName.replace('"',' ').replace(' ','_');HttpHeadersresponseHeaders=newHttpHeaders();responseHeaders.setContentType(MediaType.parseMediaType("image/jpeg"));responseHeaders.setContentLength(fileSize);responseHeaders.add("Content-Disposition","filename=\""+encodedFileName+'\"');returnresponseHeaders;}
E no html simplesmente
<img src="produtos/algum_id/imagem" />
Nicolas_Fernandes
Legal, obrigado pelas dicas.
Minha aplicação usa como server-side C#, mas vou usar esse seu código como base para o meu.
Qualquer coisa, volto a postar aqui!