viernes, junio 27, 2008

[Java] File Upload servlet


Aqui les dejo una version actualizada del código para java servlet de "file upload".
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"
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"


Se agregarán todas las librerias "commons file upload"

y se agregaran todas las librerias "commons IO"

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:

14. Buscar un archivo cualquiera, preferentemente .txt y subirlo... se verá la siguiente página:

15. Buscar el archivo "subido" en c:/nuevo.txt.

16. Fin.



xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

java.net.SocketException: Software caused connection abort: socket write error

JAVA : Utilizando la librería " org.apache.commons.net.ftp ", encontré que al listar los archivos del servidor FTP se generaba...