Upload foto + JSF 2

[i]Boa noite galera, estou desenvolvendo um sistema pra um cliente e o sistema possui upload de fotos.

Consigo fazer o upload das fotos normalmente, estou salvando as imagens fora do contexto da aplicação ( mais precisamente estou salvando no D:/ do servidor ) e salvo o path no banco de dados, até aqui tudo bem as imagens estão sendo armazenadas com sucesso lá.

Porém preciso exibir estas imagens em um dialog do primefaces quando o usuario selecionar a coluna de referencia em um datatable do JSF 2.

Meu problema é o seguinte, como faço pra exibir esta imagem ( que está fora do contexto, D:/ do servidor ) em um dialog do primefaces?

Alguém já passou por isso?

Ficaria grato se alguém ajudasse !!![/i]

Up pq to precisando msm de ajuda !!

Mesmo problema aqui, como faço pra pegar as imagens que estao fora do contexto do site e exibir no site?

[i]Ta difícil aqui também cara… Não to conseguindo de jeito nenhum…

Ninguém passou por isso e conseguiu resolver?

To no aguardo…[/i]

Cara consegui, vou te mandar como que ta o meu codigo.
Só tem 2 detalhes:
1-Toda vez que voce fizer o deploy do projeto ele vai limpar a pasta de upload, entao teria que fazer um backup antes de dar depoy, e por de volta depois. Mais pra frente vou fazer um esquema que nao coloque dentro da pasta do site as imagens, ai ele nao exclui os uploads a cada deploy.
2-Se voce tiver usando o netbeans pra testar, não use. aqui eu estava usando e dava problema pois ele configurava a pasta do site na pasta dos projetos do netbeans. o que eu fiz foi ao inves de testar pelo netbeans, foi compilar o .war do site, jogar o .war na pasta webapps do tomcat, e fazer o deploy manualmente pelo tomcat manager.
Segue os codigos como prometido:

método do managedBean pra recuperar as fotos do upload:

public List<String> getImagens(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
        
//        File pastaImagensTopo = new File(scontext.getRealPath("/WEB-INF/imagensTopo/"));
        File pastaImagensTopo = new File(scontext.getRealPath("/uploads/imagensTopo/"));
        if(!pastaImagensTopo.exists())pastaImagensTopo.mkdirs();
        File[] arquivos = pastaImagensTopo.listFiles();
        ArrayList imagens=new ArrayList();
        for(File arquivo : arquivos){
            if(arquivo.isFile()){
                String ext=arquivo.getName().substring(arquivo.getName().lastIndexOf(".")).toLowerCase();
                if(ext.equals(".jpg")||ext.equals(".jpeg")||ext.equals(".bmp")||ext.equals(".gif")||ext.equals(".png")){
                    imagens.add("/uploads/imagensTopo/"+arquivo.getName());
                }
            }
        }
        return imagens ;
    }

método do managedBean pra fazer o upload:

public void upload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage(event.getFile().getFileName() + " foi enviado com sucesso.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        // Do what you want with the file        
        try {
            byte[] foto = event.getFile().getContents();
            String nomeArquivo = event.getFile().getFileName();  
            FacesContext facesContext = FacesContext.getCurrentInstance();  
            ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();  
            String arquivo = scontext.getRealPath("/uploads/imagensTopo/" + nomeArquivo);
            
//            String arquivo = scontext.getContextPath()+"/uploadis/" + nomeArquivo;
            File f=new File(arquivo);
            if(!f.getParentFile().exists())f.getParentFile().mkdirs();
            if(!f.exists())f.createNewFile();
            System.out.println(f.getAbsolutePath());
            FileOutputStream fos=new FileOutputStream(arquivo);
            fos.write(foto);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Pagina de upload:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data">  
  
            <p:fileUpload fileUploadListener="#{fileUploadController.upload}"  
                    mode="advanced"   
                    update="messages"  
                    sizeLimit="5000000"   
                    allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/"/>  

            <p:growl id="messages" showDetail="true"/>

        </h:form>  
    </h:body>
</html>

Pagina que mostra a galleria das imagens upadas(tem uma tabela em cima que mostra os caminhos das imagens mas ignora aquilo, tinha feito so pra teste mesmo):


<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:composition template="/templates/template.xhtml">

        <ui:define name="titulo">Eventos - ACCI</ui:define>

        <ui:define name="conteudo">

            <p:growl id="aviso" autoUpdate="true" />
            
            Caminho das imagem hahaha:<br/>
            #{imagensTopo.caminho}
            
            <f:view>
                <h:form>
                    <p:dataTable value="#{imagensTopo.imagens}" var="item">
                        <p:column>
                            <f:facet name="header">
                                <h:outputText value="Código" />
                            </f:facet>
                            <h:outputText value="#{item}" />
                        </p:column>
                    </p:dataTable>
                </h:form>
            </f:view>
            
            <p:galleria value="#{imagensTopo.imagens}" var="imagem" >
                <p:graphicImage value="#{imagem}"/>
            </p:galleria>


        </ui:define>

    </ui:composition>
</html>

Eh isso ai, comenta ai se deu certo ou se nao deu algum problema… talvez eu consiga te ajudar.

1 curtida