Diferencia entre revisiones de «File upload con JSP»

De ChuWiki
Saltar a: navegación, buscar
m
m (apache-commons-fileupload)
Línea 22: Línea 22:
 
En action hemos puesto una página jsp subefichero.jsp que es la que recibirá el submit de este formulario. Podría ser también un servlet.
 
En action hemos puesto una página jsp subefichero.jsp que es la que recibirá el submit de este formulario. Podría ser también un servlet.
  
== apache-commons-fileupload ==
+
== Parte del servidor ==
  
 
En la página JSP o Servlet donde recibimos el formulario, debemos realizar el siguiente código para tratar los datos recibidos, con clases de apache-commons-fileupload
 
En la página JSP o Servlet donde recibimos el formulario, debemos realizar el siguiente código para tratar los datos recibidos, con clases de apache-commons-fileupload

Revisión del 16:24 24 mar 2011

Liberías

Para subir ficheros al servidor con JSP, necesitamos librerías adicionales. Una de las más usadas es apache-commons-fileupload, que necesita también apache-commons-io. Debemos descargarlas y ponerlas en el lib de nuestra aplicación web.

Hay más librerías que permiten hacer lo mismo. Incluso puede que sea posible hacerlo sin librerías, pero una búsqueda rápida en google no me ha dado resultados.

Formulario

En html el formulario para subir se puede parecer a esto

<form action="subefichero.jsp" enctype="multipart/form-data" method="post"> 
Fichero: <input type="file" name="fichero"/></br> 
<input type="submit" value="Subir fichero"/> 
</form> 

el formulario debe ser enctype="multipart/form-data" para que admita el envío del fichero. La primera pega que encontramos con JSP es que si el envío el multipart, no funcionan las llamadas a request.getParameter(), siempre devuelven null. Por ello, si el formulario tiene más campos que necesitemos leer, debemos delegar toda la tarea en la librería apache-commons-fileupload

En action hemos puesto una página jsp subefichero.jsp que es la que recibirá el submit de este formulario. Podría ser también un servlet.

Parte del servidor

En la página JSP o Servlet donde recibimos el formulario, debemos realizar el siguiente código para tratar los datos recibidos, con clases de apache-commons-fileupload

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);


// req es la HttpServletRequest que recibimos del formulario.
// Los items obtenidos serán cada uno de los campos del formulario,
// tanto campos normales como ficheros subidos.
List items = upload.parseRequest(req);

// Se recorren todos los items, que son de tipo FileItem
for (Object item : items) {
   FileItem uploaded = (FileItem) item;

   // Hay que comprobar si es un campo de formulario. Si no lo es, se guarda el fichero
   // subido donde nos interese
   if (!uploaded.isFormField()) {
      // No es campo de formulario, guardamos el fichero en algún sitio
      File fichero = new File("/tmp", uploaded.getName());
      uploaded.write(fichero);
   } else {
      // es un campo de formulario, podemos obtener clave y valor
      String key = uploaded.getFiledName();
      String valor = uploaded.getString();
   }
}