Commons File Upload

julio 15, 2008

Por cuestiones de trabajo, he tenido hacer una pequeña aplicación Web que carga un archivo plano separado por comas y carga sus registros en una base de datos.

Pues he utilizado una librería de Apache Commons llamada File Upload, la cual nos provee de de un framework mas avanzado para el manejo de archivos.

Bueno hasta ahora la he comenzado a utilizar entonces pondré en este post los pasos que he hecho para que me funcione.

Primero descargué la librería de File Upload de aqui, y luego descargue la librería Commos.io de Apache la cual es necesaria para FileUpload.

Luego las pongo dentro de la carpeta WEB-INF/lib.

Basicamente he creado una página con un formulario, un File Input y un boton de Submit. y un Servlet que será el encargado de procesar el archivo.

La Página:

<form name="form1" action="cargarservlet" method="post"
              enctype="multipart/form-data">
      <input type="file" name="archivo"/>
      <input type="submit" name="enviar" value="enviar"/>
    </form>

Es muy importante que tengamos encuenta que el formulario debe tener como metodo a usar POST  y el tipo de encripción debe ser “multipart/form-data” esto es necesario para poder hacer el upload de archivos.

Ahora el Servlet

incluimos las librerias necesarias para File Upload

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

y en el el metodo doPost ponemos el codigo necesario para procesar el archivo.

Gracias a FileUpload podemos hacer una verificación para saber si en el contenido enviado vienen datos multipar o y así saber como tratar el request.

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

Ahora creamos los objetos para procesar el archivo

FileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

List  items = upload.parseRequest(request);

En donde items es un arreglo de objetos FileItem.

ahora nos resta recorrer el arreglo item para procesar cada uno de los archivos cargados.

Iterator iter = items.iterator();
while (iter.hasNext())
{
  FileItem item = (FileItem) iter.next();

  if (item.isFormField())
  {
    // aqui va el codigo si el objeto no es un archivo
   // sino un campo del formulario

  }
  else
  {

// Empezamos a leer las propiedades del archivo

String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();

InputStream data = item.getInputStream();

DataInputStream in = new DataInputStream(data);

BufferedReader br = new BufferedReader(new InputStreamReader(in));

 

// Leemos linea a linea el archivo.

while ((line = br.readLine()) != null)
{
  st = new StringTokenizer(line, ";");
  System.out.println("ARCHIVO *** :" + line);
}
br.close();

}

Esta funcionalidad nos permite leer el archivo y tenerlo en memoria mientras lo guardamos en una base de datos.

Aqui lo que hacemos es procesar la linea y separar sus columnas, segun nuestra definición y luego guardarlas en las tablas de base de datos correspondientes.

Pero igual si nuestro objetivo no es solo leer el archivo sino guardar el archivo fisico en el filesystem del servidor entonces lo que hay que hacer es volcar el contenido utilizando:

item.write(new File(“ruta del archivo”));

Bueno esta era solo una pequeña introducción al tema, si les interesa utilizarlo y llegar mas al fonde de esta librería pueden consultar la dirección oficial y su guía de  uso.

http://commons.apache.org/fileupload/using.html

Gracias por la atención, si tienes comentarios  no dudes en hacerlos, igual estamos para ayudarnos.

Anuncios