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 y commons-fileupload-1.1.1.jar .
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:
Código:
<%@ 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!
Marcadores