uploadedfile multiple fileupload example advanced jsf file-upload primefaces netbeans-7 temporary-files

jsf - multiple - primefaces p:/ fileupload



¿Cómo subir archivos sin convertirlo en archivo temporal?(Primefaces de JB Prime de NetBeans) (1)

¡Buen día a todos!

He estado haciendo una aplicación web simple usando Netbeans, JSF y Primefaces que pueden cargar archivos .csv, .jpeg / .jpg y .pdf. Hice 2 carpetas que se almacenaron en la unidad C: (carpeta cargada y carpeta tmp).

Asigné la carpeta "cargada" a donde están almacenados los archivos cargados y el "tmp" para el .tmp de los archivos cargados. He pasado por muchos hilos de preguntas y video tutorial que seguí correctamente.

También descargué commons fileupload y commons io y lo agregué a la biblioteca. Está funcionando bien, muestra que se está cargando e incluso vio el archivo .tmp en la carpeta a la que se lo asigné.

Pero no puedo ver los archivos cargados en mi carpeta "cargada". Entonces , mi pregunta es, ¿cómo puedo cargar estos archivos en mi carpeta "cargada"?

Aquí están mis códigos:

index.xhtml

<?xml version=''1.0'' encoding=''UTF-8'' ?> <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>Facelet Title</title> </h:head> <h:body> <h:form enctype="multipart/form-data" > <p:fileUpload fileUploadListener="#{FileUploadControl.fileUploadControl}" mode="advanced" update="messages" auto="true" sizeLimit="10000000" allowTypes="/(/.|//)(gif|jpe?g|csv|pdf)$/" /> <!-- --> <p:growl id="messages" showDetail="true"/> </h:form> </h:body> </html>

FileUploadControl.java

package controller; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import java.util.logging.Level; import java.util.logging.Logger; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; import org.primefaces.model.UploadedFile; @ManagedBean @SessionScoped public class FileUploadControl implements Serializable { private String destination = "C://uploaded//"; private UploadedFile file; public UploadedFile getFile() { return file; } public void setFile(UploadedFile file) { this.file = file; } public FileUploadControl() { } public void TransferFile(String fileName, InputStream in) { try { OutputStream out = new FileOutputStream(new File(destination + fileName)); int reader = 0; byte[] bytes = new byte[(int) getFile().getSize()]; while ((reader = in.read(bytes)) != -1) { out.write(bytes, 0, reader); } in.close(); out.flush(); out.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } public void upload() { String extValidate; if (getFile() != null) { String ext = getFile().getFileName(); if (ext != null) { extValidate = ext.substring(ext.indexOf(".")+1); } else { extValidate = "null"; if (extValidate.equals("pdf")) { try { TransferFile(getFile().getFileName(), getFile().getInputstream()); } catch (IOException ex) { Logger.getLogger(FileUploadControl.class.getName()).log(Level.SEVERE, null, ex); FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("Wrong", "Error Uploading file...")); } FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("Succesful", getFile().getFileName() + "is uploaded.")); } else { FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("Wrong_ext", "only extension .pdf")); } } } else { FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage("Wrong", "Select File!")); } } }

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <!--File upload commons --> <filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> <init-param> <param-name>thresholdSize</param-name> <param-value>51200</param-value> </init-param> <init-param> <param-name>uploadDirectory</param-name> <param-value>C:/tmp</param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <!--File upload commons --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list>

Gracias por su respuesta y ayuda. deseando que llegue!


La razón principal por la que está fallando es que no ha vinculado el atributo de value a la variable de bean de respaldo, por lo que getFile() siempre devolverá nulo y la upload no hará nada.

Probablemente aún no obtendrá ningún resultado porque parece que está intentando combinar dos modos de operación diferentes del componente <p:fileUpload/> .

  1. Modo simple

    • Usted no define un fileUploadListener
    • Define un atributo de value en el componente y se vincula al atributo de tipo UploadedFile en su bean de respaldo (que tiene)
  2. Modo avanzado

    • Usted no define un atributo de value
    • Usted define un fileUploadListener que está vinculado a un método en su bean de respaldo (que también tiene)