- Carpeta destino
nuestro directorio destino se encuentra en /modulos/rh/rhEmpleadoFoto/fotos
- En el .xhtml
<h:form enctype="multipart/form-data" id="formfileupload" prependid="false"> <!--aca neustro componente se ejecuta automaticamente apenas recibe el archivo--> <p:fileupload actualiza="" allowtypes="/(\.|\/)(gif|jpe?g|png)$/" auto="true" cancellabel="Cancelar" componente="" donde="" dragdropsupport="true" fileuploadlistener="#{rhEmpleadoFotoController.accionFileUpload}" foto="" grafico="" id="fileupload" imagen="" la="" label="Seleccionar" mi="" mode="advanced" rendered="true" renderiza="" se="" sizelimit="1000000" update=":formpersonal:idRhEmpleadoFoto" uploadlabel="Subir al servidor" xhtml=""> </p:fileupload> <!-- para tener donde visualizar la imagen despues de ingresarse. El nombre en el contexto de la aplicacion para mi controlador es rhEmpleadoFotoController --> <p:graphicimage cache="false" height="300" id="imagemTmp" style="margin: 0 auto;" value="#{rhEmpleadoFotoController.imagem}"> </p:graphicimage></h:form>En nuestro xhtml ingresamos el anterior codigo, lo adaptamos de acuerdo al framework que estemos usando en mi caso primefaces.
- Controlador
public void accionFileUpload(FileUploadEvent event) { //evento propio del framework try { file = event.getFile(); byte[] foto = event.getFile().getContents(); String nomeArquivo = event.getFile().getFileName(); FacesContext facesContext = FacesContext.getCurrentInstance(); ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext(); String archivo = scontext.getRealPath("/modulos/rh/rhEmpleadoFoto/fotos/" + nomeArquivo); //guardar en ruta basica para luego mover crearArchivo(foto, archivo); imagem = new DefaultStreamedContent(event.getFile().getInputstream()); //agregar geter y seter para poder ser accedida desde otros xhtml selectedEntidad = new RhEmpleadoFoto(); //entidad para persistir en la base de datos selectedEntidad.setNombre(nomeArquivo); selectedEntidad.setIdRhEmpleado(idRhEmpleado); long peso = event.getFile().getSize(); int x = (int) peso; selectedEntidad.setPeso(x); selectedEntidad.setRuta("/modulos/rh/rhEmpleadoFoto/fotos"); selectedEntidad.setLlaveUnica(GenerarRandom().toString()); selectedEntidad.setEstadoEliminado(Boolean.FALSE); getFacade().create(selectedEntidad); //crea el objeto(RhEmpleadoFoto) en la bd //dos objetos para hacer renombrado de archivo y copiado a carpetas RhEmpleadoFoto current = ejbFacade.findObjeto(selectedEntidad); RhEmpleadoFoto current2 = new RhEmpleadoFoto(); RhEmpleadoFoto current2 = ejbFacade.findObjeto(selectedEntidad); if (renombrarArchivo(current2.getRuta() + "/" + current2.getNombre(), current2.getRuta() + "/" + (idRhEmpleado.getIdRhEmpleado() + ""))) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "Ingreso Exitoso")); } else { if (renombrarArchivo(current2.getRuta() + "/" + current2.getNombre(), current2.getRuta() + "/" + (idRhEmpleado.getIdRhEmpleado() + ""))) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "Ingreso Exitoso")); //para enviar el mensaje a la growl del framework } else { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Mensaje:", "" + current2.getRuta() + "/" + current2.getNombre() + " " + current2.getRuta())); } } recreateModel(); FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " Fue Cargado Exitosamente."); FacesContext.getCurrentInstance().addMessage(null, msg); //cerrarPanelFoto(); //una funcion booleana para renderizar el contenido en el xhtml de acuerdo a lo sucedido } catch (Exception ex) { Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex.getMessage()); FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " Error en la carga:" + ex.getMessage()); FacesContext.getCurrentInstance().addMessage(null, msg); } } /** * Funcion para mover y renombrar un archivo * * @param String archivo Archivo o directorio a renombrar * @param String directorio Directorio destino * @exception RCException Se genera una excepción genérica. * @return boolean */ public boolean renombrarArchivo(String archivo, String directorio) { try { FacesContext facesContext = FacesContext.getCurrentInstance(); ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext(); String Sarchivo = scontext.getRealPath(archivo); File archivos = new File(Sarchivo); String Sdirectorio = scontext.getRealPath(directorio); File dir = new File(Sdirectorio); String name = archivos.getName(); int j = name.indexOf("."); String newname = "" + GenerarRandom() + "" + name.substring(j, name.length()); boolean semovio = archivos.renameTo(new File(dir, newname)); if (!semovio) { System.out.print("El archivo no se ha Movido ..."); return false; } else { current.setNombre(newname); current.setRuta("/modulos/rh/rhEmpleadoFoto/fotos/" + idRhEmpleado.getIdRhEmpleado()); //una carpeta con el id del objeto que lo contiene, en mi caso empleado ejbFacade.edit(current); System.out.print("Se Movio ..."); return true; } } catch (Exception e) { System.out.print("" + e.getMessage()); return false; } } /** * Funcion para crear un archivo * * @param byte[] bytes objeto * @param String archivo archivo * @exception RCException Se genera una excepción genérica. * @return void */ public void crearArchivo(byte[] bytes, String archivo) { FileOutputStream fos; try { fos = new FileOutputStream(archivo); fos.write(bytes); fos.close(); } catch (FileNotFoundException ex) { Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(IngenieriaProductoImagenController.class.getName()).log(Level.SEVERE, null, ex); } }
- Web.xml
<filter> <filter-name>PrimeFaces FileUpload Filter</filter-name> <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> //de mi framework <init-param> <param-name>thresholdSize</param-> <!--tamaño maximo de los archivos para el contexto de la aplicacion--> <param-value>512000</param-value> </init-param> </filter> <filter-mapping> <filter-name>PrimeFaces FileUpload Filter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <filter> <mime-mapping> <extension>png</extension> <mime-type>image/png</mime-type> </mime-mapping>
- Librerías
Para una opcion mas clara en lenguaje nativo descargue este ejemplo. >>
No hay comentarios:
Publicar un comentario