lunes, 25 de agosto de 2008

File Upload

Utilidad para subir ficheros a un servidor en JAVA. Necesité esto para una práctica de siscomp, en la cual, agregadas a unas noticias, había que subir unos ficheros, pues os explico como lo hice.

Descargar: Desde la página web de Apache, hay que descargar 2 ficheros, con unos JAR que hay que añadir al proyecto. Estos son el FileUpload y el Commons-io.

En la JSP en la que vayais a poner el formulario para introducir el fichero:

Declaración de Formulario: -->incluir enctype, con ese tipo, en el FORM, no lo pongo en Texto, porque el parser de blogger lo detecta como un form
< ... enctype="multipart/form-data" ...>

Entrada del Fichero: Os pondrá el típico botón de examinar que tan bien queda. poner en el INPUT
< name="...." type="file">
Este:


--------------------------------------------------------------------------------
Servlet JAVA: Este es más complicado, y casi todas las explicaciones que hay por internet son para la versión antigua, con la nueva versión del FileUpload, hay que hacerlo así. Hay que tener en cuenta, que leer del request, no funciona, esto:
request.getAttribute (....) --> NO FUNCIONARÁ.

importaciones:
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

Creación de objetos necesarios:

FileItemFactory fichSubir = new DiskFileItemFactory();
ServletFileUpload subir = new ServletFileUpload (fichSubir);

Tendremos que trabajar dentro de un Try - catch

try {
-->CREAMOS LISTA E ITERADOR. LA LISTA, SE COGE DEL REQUEST CON EL
-->OBJETO CREADO

List ficheros = subir.parseRequest(request);

Iterator iter = ficheros.iterator();
while (iter.hasNext())
{
--> DENTRO DEL WHILE, DISTINGUIMOS FICHEROS, DE CAMPOS NORMALES

if (!item.isFormField()) //-->ES UN FICHERO
{
--> LA SUBIDA SE HACE PROPIAMENTE EN UNA INSTRUCCIÓN, PERO
--> DENTRO DE UN TRY - CATCH

File ficheroSubir = new File(cadena);

try {
item.write(ficheroSubir);
} catch (Exception ex) {
ex.printStackTrace();
}

}
else
{
--> TRATAMOS EL RESTO DE CAMPOS. FACILMENTE, LEEMOS EL NOMBRE
--> DEL CAMPO, Y RECIBIMOS SU VALOR, PARA TODOS LOS QUE
--> TENGAMOS.
if (item.getFieldName().equalsIgnoreCase("titular")) Titular = item.getString();
....
}

}

}

} catch (FileUploadException ex) {
ex.printStackTrace();
}

------------------------------------------------------------------------------------------
Si lo necesitais y teneis dudas, o mirais la web de apache --> FileUpload, o me preguntais

No hay comentarios: