prime subida
Hola a todos, estoy intentando subir una imagen al servidor a traves de primefaces 5.2 y jsf 2.2 pero haciendo el debug se me para en esta linea .
También me he dado cuenta con el debug que lo hace de modo native
Mi codigo completo es el siguiente:
UploadedFile file1=event.getFile();
String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
String realPath =contextPath +"/resources/images/photos/"+ file1.getFileName();
try{
FileInputStream in=(FileInputStream)file1.getInputstream();
OutputStream out = new FileOutputStream(new File(realPath));
int read = 0;
byte[] bytes = new byte[(int)file1.getSize()];
while ((read = in.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
in.close();
out.flush();
out.close();
}catch(Exception e){
FacesMessage message = new FacesMessage("Error file");
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
¿tengo que poner algo en web xml?Espero vuestra contestación
- Inicie sesión o regístrese para enviar comentarios
Re: prime subida
¿Ya probaste con los ejemplos del PrimeFaces ShowCase?
P.D.: Sería muy bueno para esta comunidad que compartieras las soluciones a los problemas por los cuales has preguntado aquí, sobretodo para crear una base de conocimiento más solida.
Sí ,Estuve probando antes de
Sí ,Estuve probando antes de hacer esto el codigo tal cual de Primefaces Swocase de single.xhtml y fileUploadView.java.¿compañeros alguna idea para solventar esto? gracias de antemano.
Código completo
Podrías subir tu código completo (xhtml, java) junto con la traza del error que te sale cuando se detiene?
error codigo
.html
-------------
<p:fileUpload fileUploadListener="#{uploadBean.handleFileUpload}" mode="advanced" dragDropSupport="false"
update="messages" sizeLimit="100000" fileLimit="3" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />
<p:growl id="messages" showDetail="true" />
</h:form>
java lo puse arriba
-------------
En la linea
OutputStream out = new FileOutputStream(new File(realPath));
se me va a FileOutputStream.java y me subraya en verde :
* @exception FileNotFoundException if the file exists but is a directory
* rather than a regular file, does not exist but cannot
* be created, or cannot be opened for any other reason
* @exception SecurityException if a security manager exists and its
* <code>checkWrite
method denies write access
* to the file.
* @see java.io.File#getPath()
* @see java.lang.SecurityException
* @see java.lang.SecurityManager#checkWrite(java.lang.String)
*/
public FileOutputStream(File file) throws FileNotFoundException {
this(file, false);
}
En el tomcat me pone esto
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerImpl
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1634)
at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1099)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:261)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:180)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:460)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5184)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:586)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1750)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerImpl
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.catalina.session.StandardSession.doWriteObject(StandardSession.java:1710)
at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1116)
at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:401)
at org.apache.catalina.session.StandardManager.unload(StandardManager.java:320)
at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:487)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5386)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1425)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1414)
... 4 more
jul 27, 2015 6:58:32 PM org.apache.catalina.session.StandardManager startInternal
GRAVE: Excepción cargando sesiones desde almacenamiento persistente
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerImpl
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1355)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1634)
at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1099)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:261)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:180)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:460)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5184)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:586)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1750)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerImpl
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at org.apache.catalina.session.StandardSession.doWriteObject(StandardSession.java:1710)
at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1116)
at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:401)
at org.apache.catalina.session.StandardManager.unload(StandardManager.java:320)
at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:487)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5386)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1425)
at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1414)
... 4 more
ayuda prime
¿alguna idea de como solucionar esto?
Re: ayuda prime
Parece ser un error de JPA, ¿no? Esta línea es muy sospechosa:
¿Qué librerías (incluyendo versiones) estás usando?
lib
Si estoy utilizando jpa.
librerias añadidas al proyecto:
eclipseLink(jpa 2.1)-->eclipselink.jar
eclipseLink(jpa 2.1)-->javax.persistence_2.1.0.v201304241213.jar
eclipseLink(jpa2.1)-->org.eclipse.persistence.jpa.jpql_2.5.2.2014319-9ad6abd.jar
primefaces5.2 jar
jsf2.2-javax-faces.jar
mysqljdbcdriver-->conecctor 5.1.23
------------
tomcat 8.0.23
netbeans 8.02
Serializable
Pues por la traza al parecer tu managed bean no está implementando la interface Serializable. Eso es lo que creo que está pasando ya que no está el código completo java, solo está el método handleFileUpload para cargar el archivo. Sube tu código java completo.
codigo
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
@ManagedBean
public class UploadBean {
public void handleFileUpload(FileUploadEvent event) {
UploadedFile file1=event.getFile();
String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
String realPath =contextPath +"/resources/images/fotos/"+ file1.getFileName();
try{
FileInputStream in=(FileInputStream)file1.getInputstream();
OutputStream out = new FileOutputStream(new File(realPath));
int read = 0;
byte[] bytes = new byte[(int)file1.getSize()];
while ((read = in.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
in.close();
out.flush();
out.close();
FacesMessage message = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, message);
}catch(Exception e){
FacesMessage message = new FacesMessage("Error file");
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
He puesto import
He puesto
public class UploadBean implements Serializable{
LO DE ANTES
}
hE HECHO EL DEBUG, Y ME DA UNA EXCEPTION Y ME PONE en la traza
e : FileNotFoundException y en value pone#1030
No se encontro el archivo
El error se presenta cuando no se encuentra el archivo.
Para asegurarte, puedes imprimir la ruta antes de intentar subir el archivo.
Copias y pegas la direccion en el navegador y ves si existe el archivo.
Hola, de nuevo, he puesto lo
Hola, de nuevo, he puesto lo siguiente:
System.out.print(contextPath);
String realPath =contextPath +"/resources/images/fotos/"+ file1.getFileName();
System.out.print(realPath);
en contextPath me sale----->/prueba ,es decir /nombreproyecto
file1.getFileName();-->imagen.gif
y en realPath-->/prueba/resources/images/fotos/imagen.gif
he copiado /prueba/resources/images/fotos/imagen.gif y me sale direccion invalida.
No existe el archivo
Eso es por que no existe la ruta o el archivo en la ruta especificada.
Verifica que la ruta que pones donde se encuentra el archivo existe.
Sigue sin
Sigue sin funcionar
EstructuradelProyecto:
-Web Pages
- resources
- images
- photos
- aqui quiero poner la imagen
En el contextPath obtengo /prueba
realPath obtengo /prueba/resources/images/photos/nombreimagen.gif
No sé que hago mal, alguna idea??Espero que me puedan ayudar
No te haría falta -Web Pages
No te hace falta "-Web Pages" en la dirección??? si - resources esta dentro de esa carpeta deberías de añadirla.
He puesto Web Pages y me
He puesto Web Pages y me sale
realPath obtengo /prueba/Web Pages/resources/images/photos/nombreimagen.gif
,pero me sigue dando poniendo en el debug y en "out" me pone " is not a known variable in the current context y en e FileNotFoundException y value 1362
Espero vuestra contestaciones y gracias.
Lo mismo
No se encuentra el archivo, compila el proyecto y lo despliegas de nuevo.
Copia "realPath" y lo pegas en la barras de direcciones del explorador de Windows y ves si la imagen
se visualiza; si no es así el path donde lo buscas no es correcto.
Tambien es importante que verifiques que la ruta exista en el servidor donde lo despliegas.
Re: prime subida (2)
La carpeta “destino” debe existir. Se puede agregar en el proyecto o puede ser creada desde código.
Tal vez el siguiente ejemplo pueda ayudar.
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
@ManagedBean
public class FileUploadView {
@PostConstruct
private void init() {
ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
File file = new File(ctx.getRealPath("/resources/images/photos/"));
if (!file.exists()) {
file.mkdirs();
ctx.log("The path was created.");
}
}
public void handleFileUpload(FileUploadEvent event) {
ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
try {
UploadedFile uploadedFile = event.getFile();
Path path = Paths.get(ctx.getRealPath("/resources/images/photos/" + uploadedFile.getFileName()));
Files.copy(uploadedFile.getInputstream(), path, StandardCopyOption.REPLACE_EXISTING);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("OK"));
ctx.log("Uploaded file: " + path);
} catch (IOException e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("ERROR"));
ctx.log("There was an error", e);
}
}
}
Puesto que esta carpeta está situada dentro del proyecto, es posible perder su contenido en cada redespliegue. Se recomienda usar un directorio externo o una base de datos.
¡Por si sirve de algo!
~~~