Bienvenido(a) a Proyecto Script

Hola!!!

Este es un buen lugar donde buscar las respuestas a tus dudas sobre "Programación", "Lenguajes", "Linux", "Electrónica", etc.

Suele ser difícil buscar en la red y encontrar respuestas claras y en español a muchas preguntas sobre estos temas, así que aquí tienes un buen lugar para iniciar.

Quieres ser parte de esto, solo ¡regístrate!

sábado, 13 de septiembre de 2008

Carga de archivos en un tag <FORM> con Java (Apache FileUpload)

La carga de archivos requiere -según la especificacion de HTML 4.0-
básicamente dice que para poder enviar un archivo hay que poner el valor
multipart/form-data al atributo enctype del tag
form, de la siguiente manera:


1 <form method="post" action="miaccion" enctype="multipart/form-data">

Esto es con respecto a el archivo HTML (o JSP, o algún tipo similar), pero
ahora falta la programación del lado del servidor. Por suerte existe Apache
Commons FileUpload, el cual implementa la solución dejandonos solo unas
clases para obtener los archivos.

Como ejemplo, imaginemos que tenemos el siguiente archiv jsp:

1 <form method="post" action="MiServlet" enctype="multipart/form-data">
2   <input name="cancion" type="file" value="~/jaguares_-_45_-_alquimista.mp3" />
3   <input name="grupo" type="text" value="Jaguares" />
4   <input name="submit" type="submit" value="Enviar" />
5 </form>


Entonces en nuestra clase MiServlet podríamos hacer lo siguiente:

1 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
2 import org.apache.commons.fileupload.servlet.ServletFileUpload;
3 import org.apache.commons.fileupload.FileItem;
4
5 public class MiServlet extends HttpServlet {
6   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
7     DiskFileItemFactory factory = new DiskFileItemFactory();
8     ServletFileUpload upload = new ServletFileUpload(factory);
9     List params = upload.parseRequest(request);
10     Map paramsMap = new HashMap();
11     for(FileItem param : params) {
12       // paramsMap["grupo","Jaguares"];
13       paramsMap.put(param.getFieldName(),param.getString());
14     }
15   }
16 }


Una vez ya en este punto, tenemos los siguientes métodos en la interfaz FileItem:


  • getInputStream()

  • getName()

  • getOutputStream()

  • getSize()

  • write(java.io.File file)

  • getContentType()



Cuando algunos de los parámetros es un archivo el método getContentType es diferente de null por lo es importante señalar que los parámetros como típicamente se obtienen aquí no tiene efecto, es decir:

   1 public class MiServlet extends HttpServlet {
   2   public void doPost(HttpServletRequest req, HttpServletResponse resp) {
   3     req.getParameter("cancion"); // null
   4     req.getParameter("grupo"); // null
   5     req.getParameterNames(); // Enumeration vacio
   6   }
   7 }



Digg!

No hay comentarios: