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 valormultipart/form-data
al atributo enctype
del tagform
, 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 }
No hay comentarios:
Publicar un comentario