post icon

Subir ficheros al servidor con JSP

Una de las opciones más utilizadas en las aplicaciones web son el upload de ficheros de cualquier tipo, hacerlo con JSP es lo que veremos hoy, para que desde la PC cliente lo subamos al servidor y de ahí hagamos con el lo que querramos.

Necesitaremos agregar 2 librerías para ellos a nuestro proyecto: commons-io y commoms-fileupload, yo lo desplegaré sobre Apache Tomcat, aunque ustedes pueden cambiar de servidor si así lo quieren.

El ejemplo será con una interfaz simple donde tendremos un caja de texto, y dos botones uno de examinar y otro de enviar respectivamente, el código es como sigue:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<%@ 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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Subidor Devtroce</title>
</head>
<body>
	<form action=up.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>
 
	<!-- codigo para subir el fichero al servidor-->
	<%
		//Ruta donde se guardara el fichero
		File destino = new File("C:\\Devtroce\\Uploads\\");
		ServletRequestContext src = new ServletRequestContext(request);
 
		if(ServletFileUpload.isMultipartContent(src)){
			DiskFileItemFactory factory = new DiskFileItemFactory((1024*1024),destino);
			ServletFileUpload upload = new  ServletFileUpload(factory);
 
			java.util.List lista = upload.parseRequest(src);
			File file = null;
			java.util.Iterator it = lista.iterator();
 
			while(it.hasNext()){
				FileItem item=(FileItem)it.next();
				if(item.isFormField())
					out.println(item.getFieldName()+"<br>");
				else
				{
					file=new File(item.getName());
					item.write(new File(destino,file.getName()));
					out.println("Fichero subido");
				} // end if
			} // end while
		} // end if
	%>
</body>
</html>

Se verá algo asi, aunque estos controles que verán no tendrán funcionalidad en si

Fichero
28 junio 2010

Comentarios desde Facebook:

  1. avatar
    Cristina Google Chrome Windows
    2 diciembre 2016 at 19:52 #

    se podrá que mo destino fuera una url de in servido ejemeplo http://server.server1.com/dir

  2. avatar
    Marcos Google Chrome Windows
    9 diciembre 2012 at 20:11 #

    este programa sirve si lo hago desde un formulario con metodo get????

    si lo hago en el metodo get me sale error
    necesito ayuda con esto

  3. avatar
    david MEXICO Mozilla Firefox Windows
    31 octubre 2012 at 16:36 #

    a mi no me salio amigos agradeceria mucho su ayuda para que me puedan pasar un proyectito con los jar necesarios y el jsp gracias

  4. avatar
    rojo MEXICO Google Chrome Windows
    13 abril 2011 at 02:30 #

    que tal gracias, me ayudo mucho! pero … a mi me marca error en java.util.List lista = upload.parseRequest(src);
    ya verifique que tenga las librerias estoy usando neatbeans gracias de antemano
    Saludos!

    • avatar
      rojo MEXICO Google Chrome Windows
      13 abril 2011 at 02:48 #

      Gracias de verdad, ya encontré el error no me estaba leyendo una librería… de verdad que funciona este código! Gracias nuevamente y estamos en contacto!

  5. avatar
    Javalex MEXICO Google Chrome Windows
    2 marzo 2011 at 15:34 #

    Hola que tal, soy un usuario de la Ciudad de Mexico, agradezco mucho este ejemplo, me ha funcionado bien y ahora quiero utilizarlo para pasar el archivo que se carga, quiero pasarlo directamente a otro jsp donde valide los datos de ese archivo y de ahí lo carge a una base de datos.

    Pero primero, lo primero, alguna idea de como hacer para pasar el archivo que subes a otro jsp para validar el archivo, saludos.

  6. avatar
    Bener ECUADOR Mozilla Firefox Ubuntu Linux
    14 febrero 2011 at 01:45 #

    Saludos tengo un problema en esta linea no me reconoce el src ServletFileUpload.isMultipartContent(src)

    Que puede ser, he copiado el codigo tal cual esta; y de igual manera he colgado las librerias

    Saludos

    • avatar
      Javalex MEXICO Google Chrome Windows
      2 marzo 2011 at 15:38 #

      a mi me paso a la hora de correrlo en mi servidor, checa si tienes las librerías commons, si usas Eclipse, indicale la ruta de tus librerias, si estas trabajando con Tomcat, checa que esten en la carpeta lib, pero el hecho de no corra o no reconzca el src es por las librerias, saludos

  7. avatar
    Salco Mozilla Firefox Windows
    28 noviembre 2010 at 01:23 #

    Pues crea primero el usuario en una página aparte y despues redirecciona a la página en donde le pides que seleccione su foto de perfil, un ejemplo sería la pagina1.jsp que dice Paso 1. ingrese su información personal y despues que le de continuar, guardas y redireccionas en la página2.jsp que dice Paso 2. seleccione su foto de perfil.
    espero q te sirva en caso de que no puedas hacerlo en una sola pagina.

  8. avatar
    Daniel UNITED STATES Opera Windows
    27 noviembre 2010 at 03:28 #

    Muy bueno me sirvio bastante…pero que pasa si en el formulario no solo hay un input tipo file si no que hay mas campos por llenar…por ejemplo hay campo donde el usuario escribe su nombre, y luego selecciona su foto…y luego al presionar enviar…como obtengo lo que puso el campo donde escribio su nombre…es que si pongo String nombre = request.getParameter(“nombre”) (nombre es el nombre de mi campo XD ) pero me tira null a la hora de obtenerlo…que debo hacer…?

  9. avatar
    Salco Mozilla Firefox Windows
    18 noviembre 2010 at 23:51 #

    Muchisimas gracias! 🙂

  10. avatar
    JEAN CARLO MEXICO Internet Explorer Windows
    24 septiembre 2010 at 22:26 #

    Como serìa este script de jsp pero ahora usando Servlets para enviar a base de datos de Oracle 10g de

Responder