Selecionar múltiplos arquivos de uma pasta

Olá pessoal,

Estou desenvolvendo uma aplicação que precisa selecionar um ou múltiplos arquivos de uma pasta e daí lê e salvá-los o baco de dados. Minha aplicação é web e não estou sabendo como fazer. Vi que para desktop usa o JFileChooser, mas no meu caso, estou desenvolvendo para web, usando JSF, então como faço? Para mim o importante é selecionar os arquivos, pois para lê e salvar no banco de dados uso PDFBox.

[quote=huliane]Olá pessoal,

Estou desenvolvendo uma aplicação que precisa selecionar um ou múltiplos arquivos de uma pasta e daí lê e salvá-los o baco de dados. Minha aplicação é web e não estou sabendo como fazer. Vi que para desktop usa o JFileChooser, mas no meu caso, estou desenvolvendo para web, usando JSF, então como faço? Para mim o importante é selecionar os arquivos, pois para lê e salvar no banco de dados uso PDFBox.[/quote]

[i]Usa JSF2? Ta usando primefaces?

Se sim, ta aqui o exemplo:[/i]

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

ok, muito obrigada! Vou testar…

mihawk,

dei uma olhada no exemplo que você me passou, foi de grande valia, pois descobrir o que daria certo para minha aplicação o fileUploadSimple. No entanto, não está inserindo o arquivo que eu quero, ou seja, no exemplo do primefaces funciona, mas no meu não. Copiei e colei direitinho, usando a página index o bean e nada, é como tivesse null. Já coloquei um break point e nada, mando executar não passar nem por ele, vejam como está:

página index:

<?xml version='1.0' encoding='UTF-8' ?>
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>


    <h:form enctype="multipart/form-data">  
        <p:growl id="message" showDetail="true" /> 
       
        <p:fileUpload value="#{fileUploadController.file}"  mode="simple" multiple="true"/>
      
        <p:commandButton value="Enviar" ajax="false" actionListener="#{fileUploadController.upload()}"/>

      

    </h:form>   

</h:body>

bean:

package org.primefaces.examples.view;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.primefaces.model.UploadedFile;

@ManagedBean
@RequestScoped
public class FileUploadController {

private UploadedFile file;  

public UploadedFile getFile() {  
    return file;  
}  

public void setFile(UploadedFile file) {  
    this.file = file;  
}  

public void upload() {  
    if(file != null) {  
        FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  
}  

}

Estou sem saber mais o que fazer!!

[quote=huliane]mihawk,

dei uma olhada no exemplo que você me passou, foi de grande valia, pois descobrir o que daria certo para minha aplicação o fileUploadSimple. No entanto, não está inserindo o arquivo que eu quero, ou seja, no exemplo do primefaces funciona, mas no meu não. Copiei e colei direitinho, usando a página index o bean e nada, é como tivesse null. Já coloquei um break point e nada, mando executar não passar nem por ele, vejam como está:

página index:

<?xml version='1.0' encoding='UTF-8' ?>
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>


    <h:form enctype="multipart/form-data">  
        <p:growl id="message" showDetail="true" /> 
       
        <p:fileUpload value="#{fileUploadController.file}"  mode="simple" multiple="true"/>
      
        <p:commandButton value="Enviar" ajax="false" actionListener="#{fileUploadController.upload()}"/>

      

    </h:form>   

</h:body>

bean:

package org.primefaces.examples.view;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.primefaces.model.UploadedFile;

@ManagedBean
@RequestScoped
public class FileUploadController {

private UploadedFile file;  

public UploadedFile getFile() {  
    return file;  
}  

public void setFile(UploadedFile file) {  
    this.file = file;  
}  

public void upload() {  
    if(file != null) {  
        FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  
}  

}

Estou sem saber mais o que fazer!![/quote]

[i]Então huliane, da proxima vez coloca seu codigo entre as tags [code] fik melhor a visualização…

Enfim, seu arquivo ta chegando null pq seu bean está como request, o escopo precisa ser maior que request… Tenta view ou session que vai funciona ^^[/i]

Pessoal, ainda não consegui resolver meu problema…
Olha estu usando JSF
primefaces 3.2.
O primefaces tem um componente que faz extamente o que eu quero, porém não estou sabendo usá-lo, vejam o coponente abaixo:
http://www.primefaces.org/showcase-labs/ui/fileUploadMultiple.jsf

O que eu quero realmente é:

  • através do fileUploadMultiple, selecionar vários pdf e inserir-los no banco de dados, pois antes eu passava o camiho de onde estavam os pdfs e agora não quero usar assim e sim selecionar os arquivos e lê e inserir no banco de dados.

Obs: para lê o pdf, está tudo ok, estou usando a biblioteca pdfBox que lê tudo direitinho, porém não estou conseguindo inserir-los no banco de dados através do fileUploadMultiple.

O banco de dados que estou usando é o próprio do NetBeans 7.2.

Dei uma pesquisada na internet e em alguns casos recomendam usar filtors do tipo:

<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class> org.primefaces.webapp.filter.FileUploadFilter </filter-class> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping>

Porém não da certo, quando mando executar o programa da um erro que nem chega a executar.

Seria a falta de alguma biblioteca a mais para complementar o primefaces ou algum .jar do fileUpload?

Por favor quem tiver algum exemplo de como usar esse componente e gravar os dados no banco de dados, agradeço muito…já faz mais de uma semana que venho tentando e nada até agora, pois li a documentação do primefaces e lá só recomenda usar o filtro que citei acima, mas não fala na adição de nenhum outro tipo de biblioteca, mas quando coloco o filtro do jeito que eles mandam da um erro que neme executa…
Ajuda por favor!

Bom dia, só pra confirmar.

Você está utilizando as bibliotecas “commons-fileupload” e “commons-io”, elas são necessárias para o utilizar este recurso.

Abraço.

AmauriSpPoa,

Não estou usando essa bibliotecas…, mas vou adicioná-las agora, pode ser a versão mais atual? Não da nenhum problemas de compatibilidade, não?

Se tiver algum exemplo de algo desse tipo posta aqui para mim, por favor. A dias que venho tentando e nada…
Mesmo sem essas bibliotecas, commons-fileupload e commons-io e usando do jeito do exemplo que está no primefaces, abre direitiho a janela para eu selecionar os arquivos que eu quero. No entanto, não estou sabendo adicionar-los no banco de dados. Antes eu passava o caminho de onde estavam meu arquivos e o pdfBox fazia a leitura e depois eu inseria no banco de dados, mas agora não estou sabendo substituir a variável onde eu passava o caminho por esse componente.

Alguma exemplo ou dica de como fazer isso?
Fico muito grata!

Bem, não tenho nenhum exemplo na mão, mas em relação as bibliotecas, segue um trecho do User Guide do prime 3.3

Dependency------------------Version *--------------- Type Description
JSF runtime------------------2.0 or 2.1 ---------------Required Apache MyFaces or Oracle Mojarra
itext -------------------------2.1.7 --------------------Optional DataExporter (PDF).
apache poi------------------ 3.7 ----------------------Optional DataExporter (Excel).
rome ------------------------1.0 ----------------------Optional FeedReader.
commons-fileupload -------1.2.1 --------------------Optional FileUpload
commons-io ----------------1.4 ----------------------Optional FileUpload

Fiz um teste aqui e você realmente precisa do filtro e das bibliotecas.

Xhtml

&lt;h:form&gt; &lt;p:growl id="glw"/&gt; &lt;p:fileUpload update="glw" label="Procurar" fileUploadListener="#{index.handleFileUpload}" multiple="true"/&gt; &lt;/h:form&gt;

[code]package br.com.sistema.fileupload;

import java.io.IOException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;

@ManagedBean
@ViewScoped
public class Index {

public void handleFileUpload(FileUploadEvent event) throws IOException {
    // no event tem algumas coisas que são uteis
    System.out.println(event.getFile().getFileName());
    FacesMessage msg = new FacesMessage("Sucesso ", event.getFile().getFileName() + " foi anexado corretamente.");
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

}[/code]

Espero que seja util.

AmauriSpPoa, obrigada, isso ai deu certo, testei e deu certo, só que agora quero gravar, os dados que eu carrguei, no banco de dados. No meu caso são arquivos pdf que eu uso o PdfBox para ler e extrair os campose a partir dai gravar no banco de dados. Não estou sabendo fazer, tem ideia de como fazer?

Olá galera,

Consegui resolver meu problema: selecioar os arquivos usando o fileUpload e gravar no banco de dados os dados dos arquivos selecionados. No entanto, agora estou querendo renomear e ordenar os arquivos que eu selecionei usando o componenente fileUpload do primefaces, ou seja, ao selecionar os arquivos, renomeá-los e ordená-los, para então essa lista ser mostrada ou pelo menos um exemplo ou ideia de como eu pego essa lista do servidor e ordeno-a.

Agradeço a ajuda!

Pelo que eu entendi, você quer pegar esses arquivos e gravar em algum lugar, para depois listar para o usuário,
Se for isso no momento da criação do arquivo em disco (new File(“Nome_do_arquivo.pdf”)) você já pode mudar o nome do arquivo,
e com a lista de nomes(que na verdade é uma lista de Strings), você pode usar algo como o código abaixo:

public static void sortString(){
        List&lt;String&gt; colecao = new ArrayList&lt;&gt;();
        colecao.add(&quot;Zebra&quot;);
        colecao.add(&quot;Aguia&quot;);
        System.out.println(colecao);
        Collections.sort(colecao);
        System.out.println(colecao);
    }

pessoal como coloco os filtros ???

Coloque esse trecho no seu web.xml