PDA

Ver la versión completa : Subir ficheros a un servidor con java y tomcat.



smaug_
16-08-2006, 13:31
Saludos queridos HH!!
Hoy vamos a aprender a crear una pagina para poder subir ficheros a nuestro servidor tomcat. Todo escrito en jsp y java por supuesto.
Nos hacen falta dos librerias, commons-io-1.1.jar (http://www.ibiblio.org/maven2/commons-io/commons-io/1.1/) y commons-fileupload-1.1.1.jar (http://www.ibiblio.org/maven2/commons-fileupload/commons-fileupload/1.1.1/) .
Poniendolas en %catalina%\common\lib es suficiente, al menos en teoria.
Bien una vez completado ya podemos empezar a picar codigo. Buscando y buscando en google, encontraba varias formas de hacerlo, pero al ir copiando en el eclipse, me decia que esos metodos estaban desfasados (deprecated). Asi que a base de mirar en la documentacion y un poco en internet, consegui sacar el siguiente fichero de pruebas. Aqui os dejo el codigo:


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"
import="java.util.*"
import="org.apache.commons.fileupload.*"
import="org.apache.commons.fileupload.servlet.*"
import="org.apache.commons.fileupload.disk.*"
import="java.io.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action=pruebas.jsp method=post enctype=multipart/form-data>
<table>
<tr>
<td>Fichero</td>
<td><input type=file name=fichero></td>
</tr>
<tr><td colspan=2><input type=submit value=enviar name=enviar>
</td>
</tr>
</table>
</form>
<%
//Ruta donde se guardara el fichero
File destino=new File("C:\\TEMP\\");
// Convertimos el HTTPRequest en un ContextRequest,
// este paso es necesario en la ultima version,
// ya que los metodos de las versiones anteriores
// se han quedado desfasados.
ServletRequestContext src=new ServletRequestContext(request);

//Si el formulario es enviado con Multipart
if(ServletFileUpload.isMultipartContent(src)){
//Necesario para evitar errores de NullPointerException
DiskFileItemFactory factory = new DiskFileItemFactory((1024*1024),destino);
//Creamos un FileUpload
ServletFileUpload upload=new ServletFileUpload(factory);
//Procesamos el request para que nos devuelva una lista
//con los parametros y ficheros.
List lista = upload.parseRequest(src);
File file= null;
//Recorremos la lista.
Iterator it = lista.iterator();
while(it.hasNext()){
//Rescatamos el fileItem
FileItem item=(FileItem)it.next();
//Comprobamos si es un campo de formulario
if(item.isFormField())
//Hacemos lo que queramos con el.
out.println(item.getFieldName()+"<br>");
else
{
//Si no, es un fichero y lo subimos al servidor.
//Primero creamos un objeto file a partir del nombre del fichero.
file=new File(item.getName());
//Lo escribimos en el disco
// usando la ruta donde se guardara el fichero
// y cogiendo el nombre del file
// Nota: Se podria hacer usando el objeto item en vez del file directamente
// Pero esto puede causar incompatibilidades segun que navegador, ya que
// algunos solo pasan el nombre del fichero subido, pero otros
// como Iexplorer, pasan la ruta absoluta, y esto crea un pequeño problema al escribir
// el fichero en el servidor.
item.write(new File(destino,file.getName()));
out.println("Fichero subido");

}
}
}



%>
</body>
</html>


Espero que a alguien le sirva de ayuda o de referencia. Cualquier duda o aportacion se agradecera mucho ^^
Un saludo hasta la proxima!

rocka8613
22-09-2010, 23:34
hola smaug_,

amigo me e inscrito nada mas para agradecerte, me sirvió mucho el ejemplo, ojala mas personas compartieran su conocimiento,

nuevamente gracias

rocka8613
29-09-2010, 17:19
hola smaug_

necesito ayuda, si aun andas por hay.

como te dije antes el codigo me funciona a la perfeccion, pero resulta k junto con el archivo enviado tambien envio otros datos en input como text o textarea, y no logro recuperarlos con el request.getParameter(); ayuda por favor, como logro recuperarlos?

Fhernd
17-11-2011, 16:47
Hola

Necesito saber cómo especificar en File destino=new File("C:\\TEMP\\"); la ruta pero en un servidor remoto (i.e. un VPS).

De antemano, gracias por su ayuda.

Hasta pronto