Selecionar múltiplos arquivos de uma pasta

14 respostas
H

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.

14 Respostas

M

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.

[i]Usa JSF2? Ta usando primefaces?

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

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

H

ok, muito obrigada! Vou testar…

H

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!!

M
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:



xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">


Facelet Title







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!!

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 ^^

H

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!

A

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.

H

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!

A

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

A

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;
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);
    }
}

Espero que seja util.

H

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?

H

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!

A

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("Zebra");
        colecao.add("Aguia");
        System.out.println(colecao);
        Collections.sort(colecao);
        System.out.println(colecao);
    }
R

pessoal como coloco os filtros ???

A

Coloque esse trecho no seu web.xml

Criado 26 de setembro de 2012
Ultima resposta 1 de out. de 2013
Respostas 14
Participantes 4