Mostrando entradas con la etiqueta Guardar una imagen en base de datos primefaces. Mostrar todas las entradas
Mostrando entradas con la etiqueta Guardar una imagen en base de datos primefaces. Mostrar todas las entradas

viernes, 20 de noviembre de 2015

guardar y mostrar una imagen o un archivo en la base de datos - Primefaces



METODO PARA GUARDAR LA FOTO - TENIENDO EN CUENTA QUE producto.DTO es mi BEAN donde esta guardada tanto el url de donde queda la imagen y el archivo que voy a procesar.

ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String realPath=(String) servletContext.getRealPath("");//obtenemos  la dirección del //contexto donde estas trabajando, para despues generar un archivo en esa direccion
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        String txtField = ec.getRequestParameterMap().get("myform:txtField");
        String filePath ec.getRealPath(String.format("/imagenes/%s",productoDTO.getPro_foto().getFileName())); //obtenemos el nombre del archivo para proceder a guardarlo en la carpeta del contexto en //este caso /imagenes
        
        try {
            FileOutputStream fos = new FileOutputStream(filePath);
            fos.write(productoDTO.getPro_foto().getContents());
            fos.flush();
            fos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,String.format("Archivo cargado: %s ", productoDTO.getPro_foto().getFileName()),
                String.format("Mensaje: %s", txtField)));
String urlfinal= filePath.replace(realPath, "");
productoDTO.setFotoUrl(urlfinal); // este metodo guarda la url donde quedo guardado el archivo en el bean productoDTO despues de esto simplemente ingresas tu bean a la base de datos y ya quedo listo para ser invocado.

____________________________________________________________________________





Formulario de ingreso


debe ser de tipo <h:form enctype="multipart/form-data">

hay que desactivar el ajax en el command button para que no tengas problemas, si este esta acompañado de un calendario vas a tener problemas con ellos por lo que te sugiero que no uses actionlistener si no mas bien el action para que puedas direccionarte a una pagina nueva despues del ingreso.


<h:outputText value="Fotografía de producto" for="foto" />
<p:fileUpload value="#{tubean.fileuploadvariable}" mode="simple" skinSimple="true"/> 


La variable donde guardaras tu foto en tu bean debe de ser de tipo  UlpadedFile ej:

private UploadedFile pro_foto;
recuerda sus respectivos getter y setter