Mar 25

Subir ficheros al servidor con JSP

 Dentro de la aplicación web que estamos haciendo, tenemos que permitir al usuario subir ficheros al servidor. Sé cómo se suben ficheros al servidor en PHP, pero nunca lo había hecho con JSP. Pensé que sería similar, pero me he encontrado con algunas sorpresas.

La primera sorpresa ha sido buscando en google. Unas búsquedas rápidas no me ha dado ningún resultado en el que se suba el fichero sin necesidad de librerías adicionales. Pensé que sería igual que con Apache/PHP, el servidor sube el fichero a una carpeta temporal y una variable le indica a nuestra aplicación PHP dónde está. En Tomcat/JSP parece ser que no es así. Insisto, quizás sí, pero no he buscado en profundidad.

Todos los resultados de google que he visto hacen referencia a que hay que usar alguna librería externa, como apache-commons-fileupload. Así que me puse a ello, usando esa librería.

La segunda pega es que al ser el form de html enctype="multipart/form-data", necesario para poder subir un fichero, en la parte del servidor JSP dejan de funcionar los request.getParameter(), siempre devuelve null. Resulta que si el request es multipart/form-data, hay que tratarlo de otra manera. Este asunto me ha llamado la atención y le ha hecho perder un puntito a JSP frente a PHP (o a Tomcat frente a Apache, no sé quién es el culpable), donde parece que  no hay esos problemas.

¿Y cómo se leen entonces los parámetros de la petición?. Pues nuevamente una búsqueda rápida en google parece indicar que la única solución es usar librerías externas y en concreto, la misma apache-commons-fileupload. Con esa librería se "parsea" la petición y obtenemos una lista de FileItem. Cada uno de ellos puede ser un fichero al que se ha hecho upload…. ¡¡ o uno de los parámetros !!. Llamando a los método getFieldName() y getString() (comprobando previamente si es parámetro o fichero) de esos FileItem obtenemos los valores.

En fin, algo que me ha parecido rebuscado y demasiado complejo frente a cómo se hace en PHP/Apache. Un pequeño tutorial de esto en la chuwiki: File Upload con JSP.

Entradas relacionadas:

4 Responses to “Subir ficheros al servidor con JSP”

  1. Rodrigo Says:

    Hola chuidiang,

    ¿Y no tendrás por casualidad que controlar las extensiones de los ficheros que se suben?
    Si lo haces verás que “fácil” es de hacer y lo bien que te salen los resultados.

    Ánimo
    Rodrigo

  2. Chuidiang Says:

    Por lo que dices de “fácil”, he tenido suerte, debo permitir que suban el fichero que les de la gana, así que no tengo que comprobar nada… quizás el tamaño, pero ni eso.

  3. martin Says:

    hola chuidiang, sabes creo que el problema es la versión de servlets que usas. por que la versión 3 de servlets nos permite subir archivos de forma nativa y mas simple que con la de apache (a mi parecer)te recomiendo que pruebes servlets 3 y la potencias con apache-commons-io y en pocas lineas puedes subir un archivo

    saludos

  4. John Ortiz Says:

    Lo importante es superar la barrera que impone cada tecnología. Es verdad, en PHP es simple y directo, pero en JSP, quizás la curva de aprendizaje sea más extensa (en determinada medida) pero una vez lo logremos, habremos adquirido más conocimiento que nos permitirá resolver problemas futuros.

    También me encuentro creando un formulario que permita subir un archivo por parte del usuario de la aplicación y Web, y luego aplicar ETL a ese archivo de texto plano (.txt).

    Gracias por la información en esta entrada.

Leave a Reply