[RESOLVIDO]Apresentar imagem em um browser

11 respostas
C

Boa noite prezados.

Tenho uma imagem salva no BD do tipo byte e estou querendo visualizá-la utilizando o browser. Meu sistema já carrega a imagem de uma pasta qualquer converte para byte e grava no BD, e também consigo pesquisá-la e gravá-la em uma pasta temporária a imagem resgatada. Agora quero pegar essa mesma imagem e apresentá-la em um browser do tipo IE, Firefox, etc. Abaixo segue o código:

//gravando imagem no BD
public void gravarImagem() throws IOException{
        InputStream  input = null;        
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        input  = getImagemPeca().getInputStream();

        try {             
             byte[] buffer = new byte[1024]; //you can configure the buffer size
              while (input.read(buffer) != -1)
                  out.write(buffer); //copy streams*/
              byte[] result = out.toByteArray();            
              pecasConsumivel.setImagemProduto(result);          
              

       } catch (IOException e) {

             //if (file != null) file.delete();
             //e.printStackTrace();
     }

     
    }


//pesquisando imagem no BD

 public void pesquisaImagem(){
          byte [] imgByte = (objsConsultar.get(0).getImagemProduto());          
          File file = null;
          OutputStream output = null;
          InputStream  input = null;          
        try {            
             String prefix = FilenameUtils.getBaseName("peca");
             String suffix = FilenameUtils.getExtension(".jpeg");
             file = File.createTempFile(prefix + "_", "." + suffix, new File("/projeto/"));
             input = new ByteArrayInputStream(imgByte);
             output = new FileOutputStream(file);
             IOUtils.copy(input, output);
             
       } catch (IOException e) {

             //if (file != null) file.delete();
             //e.printStackTrace();
           //return "";
     }

A imagem está sendo salva dentro da pasta projeto, mas eu gostaria que ao executar a pesquisa apresentasse a imagem em um browser. Estou usando JSF 1.2, richfaces, myfaces, ajax.

Fico no aguardo de uma solução.

11 Respostas

D

Leia nosso how to.
Coloque teu código envolto pelas tags [code]

C

Muito bom dia drsmachado!

Atendido a sua solicitação. Então cara, estou querendo apenas apresentar a imagem que eu pesquisar no Banco de Dados. O valor (imagem) pesquisada no BD tenho na variável file, presciso apenas pegar esse valor e apresentar no Html ou em pdf.

Fico no aguardo de alguma novidade.

D

Se você recria a imagem, a partir dos bytes do banco de dados e salva em um diretório, basta referenciar na tag img o src da mesma.

<img src="caminho/para/imagem.jpeg"/>
C
Entaum cara, na verdade não quero que essa imagem fique salva em um diretório. A ideia é quando o usuário fizer uma pesquisa de alguma peça pelo código por exemplo ele ter a opção de clicar em um link referente a peça, tipo um link [b]imagem[/b] e mostrar a imagem da peça cujo o código foi pesquisado. Eu até pensei nessa sua ideia mas ao clicar no link imagem teria que abrir uma página em jsf autoexecutando o método para pesquisar a imagem.
   Estou com a estrutura toda pronta, e até testei usando o JFrame e funcionou belezinha, mas quero que funcione com browser. 
   Na verdade ao pesquisar a imagem esse valor teria que retornar em html. Sei que teria q alterar o método de void para String por exemplo.
C

drsmachado, muito boa noite!

Cara, o graphicImage não mostra a imagem, apenas um "X". A imagem está sendo gerada belezinha no diretório, mas quando vou tentar abrir no browser ela não é mostrada. Vc sabe o q poderia ser?
D

CURIOSO_GYN:
drsmachado, muito boa noite!

Cara, o graphicImage não mostra a imagem, apenas um "X". A imagem está sendo gerada belezinha no diretório, mas quando vou tentar abrir no browser ela não é mostrada. Vc sabe o q poderia ser?</blockquote>

Provavelmente você está passando a referência errada do caminho da imagem. Veja o html gerado e cheque se você encontra a imagem por ele.

C

Boa tarde drsmachado.

Cara já procurei em todo lugar, mas não encontro resposta. O meu graphicImage não me mosta a imagem. abaixo o código:

//imagemPeca.jsp

<h:graphicImage  value="#{PecasConsumivelControle.pesquisaImagem}"  alt="imagemPeca" title="Imagem da Peça" style="width: 190px; margin-left: 11px"/>

//bean

public String getPesquisaImagem(){
         byte [] imgByte = (objsConsultar.get(0).getImagemProduto());
          File file = null;
          OutputStream output = null;
          InputStream  input = null;
        try {
             String prefix = FilenameUtils.getBaseName("peca");
             String suffix = FilenameUtils.getExtension(".jpeg");
             file = File.createTempFile(prefix + "_", "." + suffix, new File("c:/projeto/"));
             //file = File.createTempFile(prefix + "_", "." + suffix);
             input = new ByteArrayInputStream(imgByte);
             output = new FileOutputStream(file);
             IOUtils.copy(input, output);
             String dados = String.valueOf(file.getPath());
             pesquisaImagem = dados.replace( "\\", "/" );             
             output.flush();             
             output.close();
             
             

       } catch (IOException e) {

             FacesContext context = FacesContext.getCurrentInstance();
             context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro! " + e, " "));
             
           
     }
        return pesquisaImagem;
    }

Eu depurei o programa e ele me retorna o caminho certinho onde consta a imagem, mas ao passar para imagePeca.jsp a imagem não aparece. Se eu digito na url o caminho armazenado na variável pesquisaImagem, a imagem abre normalmente. Não faço ideia do que está ocorrendo.

O

Usa StreamedContent, eu fiz assim ó:

public StreamedContent getImagem() { interfaceFoto = new HibernateDAO<Foto>(Foto.class); Foto foto = interfaceFoto.getBean((long)5); imagemST = new DefaultStreamedContent(new ByteArrayInputStream(foto.getImagem())); return imagemST; }

private StreamedContent imagemST; public StreamedContent getImagemST() { return imagemST; } public void setImagemST(StreamedContent imagemST) { this.imagemST = imagemST; }

Dessa maneira vai rolar sussa :wink:

C

Boa noite amigo.

Entaum, to apanhando para mostrar a imagem em jsp. Consigo gravar e gerar no banco, mas na hora de mostrar em jsp ou html, o bicho  pegando. Tentei usar o <h:graphicImage> mas não  dando certo.
O StreamedContent, nunca usei. Será necessário utilizar alguma lib específica pra ele? Estou usando o netbeans, jboss e richfaces.

Se vc puder me dar uma luz, ficaria muito grato!!!
Consigo obter o caminho certo de onde a imagem foi montada, mas não to conseguindo passar esse caminho para a url para que seja aberta a imagem. Afinal de contas no <h:graphicImage> se deve usar o value ou a URL? Tipo <h:graphicImage value="#{meubean.metodo}"/> ou <h:graphicImage url="#{meubean.metodo}"/>. No método deveria retornar o caminho onde está a imagem?

Obrigado.

O

Ou é esse exemplo:

Ou é esse aqui:

Faz muito tempo que fiz, tem várias maneiras de upload ae.

C

Fala oiacrasec!! Blz!!?

A parada funfou!!!. Mas kra, dê-me uma luz, estou usando jsf 1.2 com o <h:commandLink>, e a aplicação funciona blz, mas a tela dá uma congelada. Então resolvi usar o <p:commandLink>, mas quando eu executo essa ação me aparece um erro dizendo “primeFaces não está definido na minhaTela.jsp”. Vc tem ideia do que possa ser? E o pior é que não aparece erro na saída do compilador.

Criado 7 de julho de 2013
Ultima resposta 6 de ago. de 2013
Respostas 11
Participantes 3