2012-08-06 54 views
10

Utilizo la simple carga de archivos de Primeras en desarrollo con Netbeans. Mi ejemplo de prueba es similar al manual Primefaces.
Mi pregunta: ¿dónde se carga el archivo en mi computadora local? ¿Cómo puedo cambiar la ruta? ¡Gracias!¿Dónde se guarda el archivo p: fileUpload cargado y cómo lo cambio?

El archivo 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> 

y el bean gestionado:

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; 

    } 
} 

Respuesta

18

Es por guardada por omisión, ya sea en la memoria del contenedor de servlets o la carpeta temporal, dependiendo del tamaño del archivo y la configuración Apache Commons FileUpload (consulte también la sección "Configuración del filtro" del capítulo <p:fileUpload> en PrimeFaces User's Guide).

No debe preocuparse por esto en absoluto. El contenedor de servlets y PrimeFaces saben exactamente lo que hacen. En realidad, en el método de acción del botón de comando debe guardar los contenidos del archivo cargado en la ubicación donde usted necesita que esté. Usted puede obtener el contenido del archivo subido como un InputStream por UploadedFile#getInputStream() o como byte[] por UploadedFile#getContents() (conseguir un byte[] es potencialmente la memoria costosa en el caso de archivos de gran tamaño, ya sabes, cada byte come un byte de la memoria de JVM, por lo que no hacer eso en el caso de archivos grandes).

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 y IOUtils son de los Comunes IO que debe de todos modos ya ha instalado con el fin de obtener <p:fileUpload> para trabajar)

Para generar nombres de archivo únicos, usted puede encontrar File#createTempFile() recurso útil.

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

Gracias, aprecio su ayuda! Obtuve la lógica y funcionó. – seinecle

+1

De nada. – BalusC

-1

que utiliza el modo simple, GlassFish 4.0 y PrimeFaces 4.0

Copia de frijol

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

página JSF

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