Componente FileUpload Jsf Primefaces gravando em disco

10 respostas
A

Boa tarde,

Alguém ai tem um exemplo funcionando, utilizando o componente FileUplad com o jar(3.0M3) Primefaces e gravando em disco ?
tentei inumeros links, alguns com inserção de filtro no web.xml mas não deu certo.

10 Respostas

A

Alguem ?

A

Estou tentando seguir e exemplo

http://www.primefaces.org/showcase-labs/ui/fileUploadSimple.jsf

Na classe FileUploadController no método upload é onde vou definir o local (fisico, ou a pasta que esta no meu projeto ou n pasta que esta na maquina)?
Caso sim, como faço ?

G

Boa tarde alexandergtk,

Segue um exemplo, feito em JSF+Primefaces, em que o arquivo eh gravado no caminho relativo WebContent/fotos:

Controller:

public void carregarArquivo(FileUploadEvent event)
			throws FileNotFoundException, IOException {

		FacesMessage msg = new FacesMessage("Sucesso", event.getFile()
				.getFileName() + " foi carregado.");
		FacesContext.getCurrentInstance().addMessage("teste", msg);

		String caminho = FacesContext.getCurrentInstance().getExternalContext()
				.getRealPath("" + "\\fotos\\" + event.getFile().getFileName());

		byte[] conteudo = event.getFile().getContents();
		FileOutputStream fos = new FileOutputStream(caminho);
		fos.write(conteudo);
		fos.close();

	}

View:

<p:fileUpload label="Procurar" fileUploadListener="#{classeUtil.carregarArquivo}" mode="advanced" update="messages" auto="true" sizeLimit="1000000" allowTypes="png,gif,jpg" required="true" id="idcomponent" <p:message for="idcomponent" /> </p:fileUpload>
Qualquer coisa, avisa!

[]'s

A

Então, nesse caso vc tá carregando o arquivo ou salvando ?

Esse é o exemplo que tá no Primefaces.

Classe FileUploadController

package org.primefaces.examples.view;  
  
import javax.faces.application.FacesMessage;  
import javax.faces.context.FacesContext;  
  
import org.primefaces.model.UploadedFile;  
  
public class FileUploadController {  
  
    private UploadedFile file;  
  
    public UploadedFile getFile() {  
        return file;  
    }  
  
    public void setFile(UploadedFile file) {  
        this.file = file;  
    }  
  
    public void upload() {  
        /*Essa é o método onde eu defino onde vou armazenar meu arquivo ?    Como eu faria isso ? */
        FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  
}

Arquivo XML

<h:form enctype="multipart/form-data">  
  
    <p:messages showDetail="true"/>  
  
    <p:fileUpload value="#{fileUploadController.file}" mode="simple"/>  
  
    <p:commandButton value="Submit" ajax="false"  
                actionListener="#{fileUploadController.upload}"/>  
  
</h:form>
G

Opa,

As duas coisas.

Nesse trecho, caso o caminho exista, a classe FileOutputSream o utiliza, caso contrário, ela o cria:

FileOutputStream fos = new FileOutputStream(caminho);  
        fos.write(conteudo);

Seu arquivo xhtml(e não xml) está errado!
[EDIT]Desculpe, não estah errado, não estah adequado à maneira que eu implementei a classe.[/EDIT]
Usa essa classe:

@ManagedBean
public class classeUtil{
public void carregarArquivo(FileUploadEvent event)  
            throws FileNotFoundException, IOException {  
  
        FacesMessage msg = new FacesMessage("Sucesso", event.getFile()  
                .getFileName() + " foi carregado.");  
        FacesContext.getCurrentInstance().addMessage("teste", msg);  
  
        String caminho = FacesContext.getCurrentInstance().getExternalContext()  
                .getRealPath("" + "\\fotos\\" + event.getFile().getFileName());  
  
        byte[] conteudo = event.getFile().getContents();  
        FileOutputStream fos = new FileOutputStream(caminho);  
        fos.write(conteudo);  
        fos.close();  
  
    }
}

xhtml:

<p:fileUpload label="Procurar"  
                        fileUploadListener="#{classeUtil.carregarArquivo}"  
                        mode="advanced" update="messages" auto="true" sizeLimit="1000000"  
                        allowTypes="png,gif,jpg" required="true" id="idcomponent"  
                        ><p:message for="idcomponent" />  
                    </p:fileUpload>

Veja se dah algum erro.
[]'s

A

Desculpe o erro, troquei XHMTL por XML ehehehhe

fiz da forma que me passou, mas onde defino que o caminho aponta para a minha pasta dentro do meu projeto.
Printei a tela e anexei caso queira dar uma olhada.


G

To apanhando do NetBeans aqui mas tah saindo, hehe

Eh Glassfish ai?

G

Dah um print no caminho para saber onde ele estah salvando. Aqui, eu utilizo eclipse, o que muda esse aspecto.

A

heheheh…tranquilo, então não to usando conta container não, estou apenas utilizando a casca e tentando entender como direciono lá.

um exemplo eu precisa apenas testar o acesso a pasta, então o que eu fiz eu usei o componente abaixo
<p:graphicImage id=“campnou” value="./imagem/teste.jpg"/>
dessa forma mostra a imagem, mas só foi teste mesmo
(O teste eu inseri manualmente a imagem, só pra ver se buscava dento da pasta a imagem que eu queria.)

O que estou buscando entender é como eu salvo dentro dessa pasta utilizando o componente FileUpload, eu criei a pasta IMAGEM dentro de pasta de WEB, então preciso jogas a imagem do upload tbm para essa mesma pasta.

F

i ae galera…

to treinando JSF + Primefaces num programinha aqui e preciso inserir uma imagem em um Paciente…

usei o que foi postado só que precisei fazer umas modificações, pra condizer com o q eu preciso:

xhtml:

<h:form id="formAnexarExames">
            <p:panel header="Anexar exame a um paciente">
                <h:panelGrid columns="2">

                    <h:outputLabel value="Paciente:* " for="paciente"/>
                    <p:selectOneMenu value="#{beanConsulta.idPaciente}" style="width: 300px" required="true" requiredMessage="Preencha o campo Paciente!">
                        <f:selectItem itemLabel="Selecione " itemValue=""/>
                        <f:selectItems value="#{beanPaciente.pacientes}" var="p" itemValue="#{p.id}" itemLabel="#{p.nome}"/>
                    </p:selectOneMenu>

                    <p:fileUpload label="Procurar"
                                  fileUploadListener="#{beanExame.carregarArquivo}"
                                  mode="advanced" update="messages" auto="true" sizeLimit="1000000"
                                  allowTypes="png,gif,jpg" required="true" id="idcomponent">
                                  <p:message for="idcomponent" />
                    </p:fileUpload>
                    
                </h:panelGrid>
            </p:panel>
</h:form>

e o método no MB:

public void carregarArquivo(FileUploadEvent event) throws Exception {

        String nomeArquivo = event.getFile().getFileName();
        String caminho = FacesContext.getCurrentInstance().getExternalContext().getRealPath("" + "\\filesUploaded\\" + nomeArquivo);

        addPaciente();
        anexo.setDataAnexo(new Date());
        anexo.setEndAnexo(nomeArquivo);
        DaoExame.merge(anexo);
        anexo = new CPExame();
        
        byte[] conteudo = event.getFile().getContents();
        FileOutputStream fos = new FileOutputStream(caminho);
        fos.write(conteudo);
        fos.close();
        
        FacesMessage msg = new FacesMessage("Sucesso", nomeArquivo + " foi carregado.");
        FacesContext.getCurrentInstance().addMessage("teste", msg);

    }

tentei fazer assim, mas após selecionar o paciente e a imagem, clico em upload e não acontece nada…

alguém pode me ajudar?

Criado 9 de novembro de 2011
Ultima resposta 19 de nov. de 2011
Respostas 10
Participantes 3