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/>
.
Modo simple
- Usted no define un
fileUploadListener
- Define un atributo de
value
en el componente y se vincula al atributo de tipoUploadedFile
en su bean de respaldo (que tiene)
- Usted no define un
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)
- Usted no define un atributo de