Colocaré los pasos exactos que yo segui para que el ejemplo funcione.
|
____________________________________________________________________________
En principio, utilice Netbeans 6 y tomcat 6 para este ejemplo.
1. Obterner la librería "Commons IO" (ver 1.4) de :
http://commons.apache.org/io/
2. Obtener la librería "commons file upload" (en este caso bajé la ver 1.2.1 de enero del 2008).
http://commons.apache.org/fileupload/
3. Ambas descomprimirlas en una carpeta "c:/librerias"
4. Crear un proyecto nuevo llamado "FileUpload"
1. Obterner la librería "Commons IO" (ver 1.4) de :
http://commons.apache.org/io/
2. Obtener la librería "commons file upload" (en este caso bajé la ver 1.2.1 de enero del 2008).
http://commons.apache.org/fileupload/
3. Ambas descomprimirlas en una carpeta "c:/librerias"
4. Crear un proyecto nuevo llamado "FileUpload"
Notar que se selecciono "Tomcat 6" como application server.
5. Crear un html nuevo llamado "uploadFile"
Colocar en el nuevo html el siguiente código:
<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <center> <form method="POST" enctype='multipart/form-data' action="/FileUpload/UploadFichero"> Seleccione el archivo a enviar al servidor<br> <input type="file" name="fichero"> <input type="submit" value="Upload"> </form> </center> </BODY> </HTML> |
6. Agregar las librerias que se descomprimieron en el archivo "c:/librerias"
Todas las librerias deberían verse así en el entorno:
7. Se crea un nuevo paquete, llamado org.txos
8. Se crea un nuevo servlet llamado "UploadFichero"
9. Colocar el siguiente código en el servlet:
/* * UploadFichero.java * * Created on 27-06-2008, 11:22:00 AM * * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.txos; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import java.util.*; /** * * @author Os */ public class UploadFichero extends HttpServlet { /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean ok = getNSaveFile(request); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); if (ok) { out.println("La transferencia del archivo fue exitosa."); } else { out.println("Fallo en transferencia de archivo."); } out.println(""); out.println(""); out.close(); } public boolean getNSaveFile(HttpServletRequest request) { try { // Chequea que sea un request multipart (que se este enviando un file) boolean isMultipart = ServletFileUpload.isMultipartContent(request); System.out.println("Is multipart=" + isMultipart); DiskFileItemFactory factory = new DiskFileItemFactory(); // maxima talla que sera guardada en memoria factory.setSizeThreshold(4096); // si se excede de la anterior talla, se ira guardando temporalmente, en la sgte direccion factory.setRepository(new File("d:/")); ServletFileUpload upload = new ServletFileUpload(factory); //maxima talla permisible (si se excede salta al catch) upload.setSizeMax(10000000); List fileItems = upload.parseRequest(request); //obtiene el file enviado Iterator i = fileItems.iterator(); FileItem fi = (FileItem) i.next(); //graba el file enviado en el servidor local //path y Nombre del archivo destino (en el server) String path = "c:/"; String fileName = "nuevo.txt"; fi.write(new File(path, fileName)); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); return false; } return true; } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /* * Handles the HTTP POST method. * @param request servlet request * @param response servlet response */ } |
10. Hacer "Build" al código del proyecto
11. Correrlo....
12. Se mostrará inicialmente el jsp.index, cambiar el path en el browser a:
13. Se deberá ver una página de este estilo:
15. Buscar el archivo "subido" en c:/nuevo.txt.
16. Fin.
|
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Hola, realice todos los pasos (en eclipse ide), pero al momento de subir los archivos tengo 2 problemas, el primero es que no todos los archivos lo sube, no se si deba tener ciertas caracteristicas el archivo:S ? y segundo que despues que si sube alguno lo deja como un archivo temporal en la ruta destino, aunque al parecer si esta completo porque si mide lo mismo que el original. Agradeceria mucho la ayuda para saber porque podria estar pasandome eso:)!!
ResponderBorrarMuchas Gracias!!
hola =D bueno estuve intentando hacer la preuba pero no puedo descargar las librerias :S espero que nos puedas ayudar por favor!!!
ResponderBorrary soy de cocha ^^
re:Anonimo,
ResponderBorrarPodrias decirme en que clase de archivos (especificamente) te ocurren esos problemas?
re: princesita feliz,
ResponderBorrar...Algo dificil ayudarte con el tema de las librerias...
Sugerencias?
PE:
ResponderBorrarDisculpen la tardanza en las respuestas, pero estuve lejos de mi maquina por un tiempo.
Hola muchas gracias por el codigo, aunque a mi no me funciona, realize paso a paso pero al momento de enviar la consulta me genera el siguiente error:
ResponderBorrarjava.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(ServletFileUpload.java:68)
servlet.UploadFichero.getNSaveFile(UploadFichero.java:53)
servlet.UploadFichero.processRequest(UploadFichero.java:32)
servlet.UploadFichero.doPost(UploadFichero.java:81)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
¿QUE PUEDE SER? Gracias
Estimado Oscar estupendo instrutivo, me has sido de mucha ayuda, todo me a funcionado a las mil maravillas. :-) gracias brother.
ResponderBorrarpara enrriqueser algo el codigo, si cambian la intrucion
String fileName = "nuevo.txt";
por
String fileName = fi.getName();
..los archivos conservan sus nombre originales y asi no se afectan al ser creados en el path.
compañero me trabaja perfecto el upload unicamente queria consultar si es posible decirle al upload que solo permita subir archivos con extension PDF y que los demas no los permita?
ResponderBorraralfagactor: proble colocar
fi.getName(); en lugar de como estaba pero me da error y no me genera el archivo x sus comentarios, gracias.
Que tal muchas gracias por aporte me ha servido de mucho
ResponderBorrar