12 November 2007

Componente File Upload - Netbeans 5.5.1 - JSF 1.1

Siempre que creamos un proyecto JSF en NetBeans, este registra automaticamente el componente de FileUpload en el fichero de configuración de proyecto web.xml yañade su jar necesario al proyecto.

El componente “File Upload” permite seleccionar archivos de cualquier tipo de nuestro sistema de ficheros para subirlos al servidor. Los contenidos de los ficheros subidos conservan los datos originales, nombre, extencion, tamaño, tipo mime...

El servidor almacena los ficheros subidos en memoria siempre y cuando no exceda los 4096 bytes, en cuyo caso los almacena en un fichero temporal. Esta caracteristica se puede cambiar modificando el parametro sizeThreshold del filtro UploadFilter registrado en nuestro web.xml.

Por defecto este componente puede manejar ficheros de hasta 1MB, este limite puede ser alterado con la propiedad maxSize del filtro UploadFilter.

Este componente viene en la paleta de componentes basicos por defecto que nos proporciona la implementacion de sun que trae netbeans de JSF; y para utilizarlo basta con arrastrar y soltarlo sobre nuestra pagina.

Si arrastamos y soltamos el componente dentro de nuestra pagina en tiempo de diseño, esta registra una propiedad por defecto llamada fileUpload1, que sera a traves de la cual accederemos a nuestro objeto subido al servidor, pues bien para terminar el flujo de subida de ficheros nos haria falta agregar un boton al cual llamare btnAlmacenar y en su accion java asociada pondre el codigo para almacenar el fichero en la ubicación donde finalmente se depositará.

En el código lo primero sera obtener la referencia y el nombre del fichero subido


UploadedFile uploadedFile = fileUpload1.getUploadedFile();

String uploadedFileName = uploadedFile.getOriginalName();

uploadedFileName = uploadedFileName.substring(uploadedFileName.lastIndexOf(File.separator) + 1);



Lo segundo y último será especificarle la ubicación donde deseamos almacenar el fichero


String fich = dir + File.separatorChar + uploadedFileName;

File file = new File(fich);

uploadedFile.write(file);



Advertencia:

Cuando el tamaño del fichero a subir excede el máximo permitido en el fichero de configuración, el componente simplemente no hace nada cuando se envia al servidor, y como efecto colateral tampoco se ejecuta ninguna accion de otros componentes, como por ejemplo los botones.


- FIN -

4 comments:

Anonymous said...

Primero que todo felicitaciones por el sito, un pregunta, conoces alguna forma de seleccionar varios archivos del visor de archivos para luego subirlos al servidor?, he visto algunas que son con flash, pero quisiera hacerlo con java directamente, eso. Que estés bien.
Saludos.

Emmerson Miranda said...

La verdad es que no lo se, pero hay librerias hechas en javascript o incluso YUI (que al parecer utiliza flash) te permiten hacer upload de multiples archivos en un solo submit.

Saludos.

Fausto said...

en richfaces 3.3 ya existe un componente que permite subir varios archivos al mismo tiempo es el rich:fileUpload

Anonymous said...

Como puedo hacer para subir la imagen a una carpeta de la aplicación, ya que en el servidor, cuando cuando hago un clean and build las imagenes se borran.