2012-08-06 5 views
10

Uso il semplice caricamento di file di Primefaces in sviluppo con Netbeans. Il mio esempio di prova è simile al manuale Primefaces.
La mia domanda: dove viene caricato il file sul mio computer locale? Come posso cambiare il percorso per questo? Grazie!Dove si trova il file caricato con fileUpload salvato e come posso cambiarlo?

Il file JSF:

<?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:p="http://primefaces.org/ui"> 
    <h:head> 
     <title>Page test</title> 
    </h:head> 
    <h:body> 
     Hello! My first JSF generated page! 
     <h:form enctype="multipart/form-data"> 
      <p:fileUpload value="#{fileBean.file}" mode="simple" /> 
      <p:commandButton value="Submit" ajax="false"/> 
     </h:form> 

    </h:body> 
</html> 

e il bean gestito:

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 
import org.primefaces.event.FileUploadEvent; 
import org.primefaces.model.UploadedFile; 


    @ManagedBean 

@RequestScoped 
public class FileBean { 

    private UploadedFile file; 

    public FileBean() { 
    } 

    public UploadedFile getFile() { 
     return file; 
    } 

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

    } 
} 

risposta

18

E 'per default salvato in entrambi memoria del contenitore di servlet o la cartella Temp, a seconda della dimensione del file e la configurazione FileUpload di Apache Commons (vedere anche la sezione "Filter Configuration" del capitolo <p:fileUpload> in PrimeFaces User's Guide).

Non dovresti preoccuparti di questo. Il contenitore servlet e PrimeFaces sanno esattamente cosa fanno. Dovresti, nel metodo di azione del pulsante di comando, salvare i contenuti del file caricato nella posizione in cui è necessario che sia . È possibile ottenere il contenuto del file caricato come UploadedFile#getInputStream() entro il entro il UploadedFile#getContents() (ottenere uno byte[] è potenzialmente costoso in caso di file di grandi dimensioni, ogni byte mangia un byte della memoria della JVM, quindi non farlo in caso di file di grandi dimensioni).

E.g.

<p:commandButton value="Submit" action="#{fileBean.save}" ajax="false"/> 

con

private UploadedFile uploadedFile; 

public void save() throws IOException { 
    String filename = FilenameUtils.getName(uploadedFile.getFileName()); 
    InputStream input = uploadedFile.getInputStream(); 
    OutputStream output = new FileOutputStream(new File("/path/to/uploads", filename)); 

    try { 
     IOUtils.copy(input, output); 
    } finally { 
     IOUtils.closeQuietly(input); 
     IOUtils.closeQuietly(output); 
    } 
} 

(FilenameUtils e IOUtils sono da Commons IO che si dovrebbe comunque già installato al fine di ottenere <p:fileUpload> al lavoro)

Per generare nomi di file unici, potresti trovare utile la funzione File#createTempFile().

String filename = FilenameUtils.getName(uploadedFile.getFileName()); 
String basename = FilenameUtils.getBaseName(filename) + "_"; 
String extension = "." + FilenameUtils.getExtension(filename); 
File file = File.createTempFile(basename, extension, "/path/to/uploads"); 
FileOutputStream output = new FileOutputStream(file); 
// ... 
+0

Grazie, apprezzo il vostro aiuto! Ho preso la logica e ha funzionato. – seinecle

+1

Prego. – BalusC

-1

ho usato la modalità semplice, GlassFish 4.0 e primefaces 4,0

Backup Bean

private UploadedFile file; 
private String destination="C:\\temp\\"; 

public void upload() { 

    System.out.println("uploading"); 
    if(file != null) { 
     System.out.println("the file is" +file); 
     FacesMessage msg = new FacesMessage("Succesful" + file.getFileName() + " is uploaded."); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 

     try { 
      copyFile(file.getFileName(), file.getInputstream()); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    System.out.println("uploaf finished"); 
} 

public void copyFile(String fileName, InputStream in) { 
    try { 
     // write the inputStream to a FileOutputStream 
     OutputStream out = new FileOutputStream(new File(destination + fileName)); 

     int read = 0; 
     byte[] bytes = new byte[1024]; 

     while ((read = in.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 

     in.close(); 
     out.flush(); 
     out.close(); 

     System.out.println("New file created!"); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

pagina JSF

<p:commandButton value="Submit" ajax="false" actionListener="#{staffController.upload}"/> 
Problemi correlati