- 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