style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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 .

OutputStream out = new FileOutputStream(new File(realPath))

También me he dado cuenta con el debug que lo hace de modo native

Mi codigo completo es el siguiente:

public void handleFileUpload(FileUploadEvent event) {
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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

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.

Imagen de marcosaw

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

 <h:form>
            <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 :

@param      file               the file to be opened for writing.
     * @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

GRAVE: standardManager.loading.ioe
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:

Caused by: java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerImpl

¿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

Imagen de marcosaw

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.File;
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

import java.io.Serializable;
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

Imagen de adrianaaae

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:

String contextPath          = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
    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.

Imagen de adrianaaae

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:

/prueba
    -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

Imagen de adrianaaae

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.

Imagen de adrianaaae

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.

package test;

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!

~~~

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">