Upload foto + JSF 2

4 respostas
F

[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]

4 Respostas

F

Up pq to precisando msm de ajuda !!

M

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

F

[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]

M

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.

Criado 20 de julho de 2012
Ultima resposta 28 de jul. de 2012
Respostas 4
Participantes 2