27
Abr
10

Subir archivos en JSP

Hace mucho estuve tratando de subir archivos a jsp y al principio con mi maquina local hacia una simple copia de los archivos (FileInputStream/FileOutputStream), pero luego de probar el programa desde otra maquina la cuestión no funcionó, y bueno me dí cuenta que se necesitaba hacer una cuestión extra y se usan 2 librerías aunque el código es realmente corto.

la estructura de la aplicación seria algo como

necesitamos las:
commons.fileupload
commons.io

este ejemplo consta de 2 paginas un simple formulario donde se habilita la subida del archivo

index.html

<html>
	<head>
		<title>EJERCICIO 04 SUBIR ARCHIVO</title>
	</head>
	<body>
		<!--Lo real mente importante es en el formulario decir -->
		<!--que van archivos con el enctype igual a MULTIPART/FORM-DATA -->
		<form action="subir.jsp" enctype="MULTIPART/FORM-DATA" method="post">
			<input type="file" name="file" /><br/>
			<input type="submit" value="Upload" />
		</form>
	</body>
</html>

y en nuestra parte interesante la
subir.jsp

<%@ page import="java.util.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.*" %>
<%@ page import="java.io.*" %>

<%
	   	/*FileItemFactory es una interfaz para crear FileItem*/
        FileItemFactory file_factory = new DiskFileItemFactory();

		/*ServletFileUpload esta clase convierte los input file a FileItem*/
        ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
		/*sacando los FileItem del ServletFileUpload en una lista */
        List items = servlet_up.parseRequest(request);

        for(int i=0;i<items.size();i++){
			/*FileItem representa un archivo en memoria que puede ser pasado al disco duro*/
            FileItem item = (FileItem) items.get(i);
			/*item.isFormField() false=input file; true=text field*/
            if (! item.isFormField()){
				/*cual sera la ruta al archivo en el servidor*/
				File archivo_server = new File("c:/subidos/"+item.getName());
				/*y lo escribimos en el servido*/
				item.write(archivo_server);
                out.print("Nombre --> " + item.getName() );
                out.print("<br> Tipo --> " + item.getContentType());
                out.print("<br> tamaño --> " + (item.getSize()/1240)+ "KB");
				out.print("<br>");
            }
        }
%>

para mas información visitar las documentaciones de las librerías
documentación FileUpload
documentación IO

NOTA:
* Al momento de subri archivos donde dice

 File archivo_server = new File("c:/subidos/"+item.getName());

, en la parte de “c:/subidos/” poner una direccion segura ya que esta por aqui pueden entrar virus.

* no usar la misma carpeta del proyecto ya que si suben un archivo jsp podria ser perjudicial.


160 Responses to “Subir archivos en JSP”


  1. 1 Alan Hugo
    junio 16, 2010 a las 9:02 pm

    Excelente tutorial.. voy a revisar todo tu material.. espero q sea de la misma calidad de este.. Saludos!-Peru

  2. 2 Alan Hugo
    junio 17, 2010 a las 12:32 pm

    Hola amigo.. ese ejemplo lo e llevado a mi trabajo.. y me sale error “item.getName()” en vez q me salga solo el nombre me sale toda direccion.. me puedes ayudar.. tu q has manejado mas tiempo esta herramienta. saludos

    • junio 18, 2010 a las 3:04 pm

      Te aparece Error, o la dirección?

      • 4 Azucena
        septiembre 3, 2014 a las 2:33 am

        amigo me marca error en esta linea en el request en esa variable que recibo o que?
        List items = servlet_up.parseRequest(request);

  3. 5 carlos
    junio 18, 2010 a las 11:28 am

    estuve probando tu codigo y me arrojaba error, pero solo le agregue lo siguiente y me funciono
    for(int i=0;i<items.size();i++){

    FileItem item = (FileItem) items.get(0);
    String n[] =item.getName().replace("\\","-").split("-");
    String nombreReal=n[n.length-1]; //nombre real del archivo para guardar
    /*item.isFormField() false=input file; true=text field*/

    if (! item.isFormField()){
    /*cual sera la ruta al archivo en el servidor*/
    File archivo_server = new File("c:/subidos/"+nombreReal);

  4. 6 sombol
    junio 19, 2010 a las 11:57 am

    //para sacar solo el nombre del archivo hay que guardarlo en un file
    File file=new File(item.getName());
    File nuevoPath= new File(“path carpeta donde se guarda”+file.getName());
    item.write(nuevoPath);

  5. 7 paco
    junio 21, 2010 a las 4:43 am

    Buenas!

    He seguido los pasos que indicas, pero me salta el siguiente error:

    org.apache.jasper.JasperException: No se puede compilar la clase para JSP:

    Ha tenido lugar un error en la línea: 10 en el archivo jsp: /subir.jsp
    FileItemFactory cannot be resolved to a type
    7:
    8: <%
    9: /*FileItemFactory es una interfaz para crear FileItem*/
    10: FileItemFactory file_factory = new DiskFileItemFactory();
    11:
    12: /*ServletFileUpload esta clase convierte los input file a FileItem*/
    13: ServletFileUpload servlet_up = new ServletFileUpload(file_factory);

    Ha tenido lugar un error en la línea: 10 en el archivo jsp: /subir.jsp
    DiskFileItemFactory cannot be resolved to a type
    7:
    8: <%
    9: /*FileItemFactory es una interfaz para crear FileItem*/
    10: FileItemFactory file_factory = new DiskFileItemFactory();
    11:
    12: /*ServletFileUpload esta clase convierte los input file a FileItem*/
    13: ServletFileUpload servlet_up = new ServletFileUpload(file_factory);

    Ha tenido lugar un error en la línea: 13 en el archivo jsp: /subir.jsp
    ServletFileUpload cannot be resolved to a type

    …..

    He introducido el .jar en mi proyecto, aunque dudo si lo he hecho bien. El que he incluido es el siguiente:
    commons-fileupload-1.2.1.jar

    que está en el .zip binario.

    Gracias!

    • junio 21, 2010 a las 2:44 pm

      lo que pasa es que tienes que usar los 2 jars,

      • 9 Azucena
        septiembre 3, 2014 a las 2:34 am

        amigo me marca error en esta linea en el request en esa variable que recibo o que?
        List items = servlet_up.parseRequest(request);

  6. 10 paco
    junio 22, 2010 a las 3:12 am

    He introducido los 2 jars, y me ocurre lo mismo.

    ¿Qué puedo hacer? Por cierto, los archivos commons-…. , los incluyo de forma normal en el proyecto, pero al compilar el jsp, me salta el error…

    • junio 22, 2010 a las 12:57 pm

      con que programa estas trabajando?

      • 12 Leydi
        junio 6, 2012 a las 11:16 am

        Hola ingeniero, estoy trabajando los mismo y me ocurre el mismo error. Trabajo con ecplise, Qué debo hacer

      • junio 6, 2012 a las 3:37 pm

        Leydi, tienes que agregar las librerías a través del eclipse. Yo las agregué directamente sobre el tomcat pues yo utilizo JCreator para esas aplicaciones

      • 14 Leydi
        junio 7, 2012 a las 2:43 pm

        Si, ya lo hice, sin embargo sigue el mismo error

      • 15 Leydi
        junio 8, 2012 a las 9:01 am

        Ok era cuestion de librerias, las añadi nuevamente y ya no me genera error, pero ahora no me hace nada, es como si recibiera null.

      • 16 Leydi
        junio 8, 2012 a las 9:31 am

        MUchas gracias por todo, ya logre cargarlo

      • junio 8, 2012 a las 1:58 pm

        Leydi, por el chat en facebook, es mejor😄

    • junio 22, 2010 a las 1:04 pm

      man yo estoy conectado como hasta dentro de 4 – 5 horas si algo agregame y me hablas por MSN

  7. 19 paco
    junio 30, 2010 a las 12:08 pm

    Buenas, ya conseguí subir un archivo al servidor, lo único que ahora tengo el siguiente problema:

    ¿Cómo puedo subir varios archivos a la vez? Es decir, tengo varios inputs de tipo “file” en el mismo formulario y quiero detectarlos todos para almacenarlos.

    Gracias

    • julio 12, 2010 a las 10:25 pm

      Paco este código debe funcionar lo único que debes hacer es agregar los inputs (con diferentes nombres) y listo

      • 21 paco
        julio 13, 2010 a las 2:11 am

        Si, si ya conseguí subir, pero varios archivos no me deja, sólo me detectaba el primer archivo a subir.

        Gracias

    • 22 David
      octubre 28, 2011 a las 6:58 pm

      como lo solucionastes? yo tengo el mismo problema, dudo q veas lo q escribo pq hace mas d eun año q tuvistes el problema, pero bueno, aqui lo dejo,
      Gracias

  8. 23 ANDRES
    julio 19, 2010 a las 9:38 pm

    PANA POR FAVOR AYUDAME EN ALGO COMO PUEDO HACER PARA UNA VEZ COPIADO LA IMAGEN EN UNA CARPETA ESPECIFICA PUEDA GUARDAR EL NOMBRE DE LA FOTO EN LA BASE DE DATO LA CUAL ESTOY USANDO MYSQL

  9. 25 aehtiopicus
    agosto 23, 2010 a las 2:09 am

    Hola, llegue a un código semejante al tuyo hace un tiempo atraz. El problema que tengo es que no puedo mostrar luego los archivos (imagenes en mi caso) que subo. Tengo que hacer un redeploy para hacerlo, por ahí vi que tenes que escribir un servlet, pero no dicen mucho. Tenes alguna idea de como solucionar esto?.

    Gracias

    • agosto 23, 2010 a las 12:30 pm

      no entendi tu pregunta. pero no necesariamente debe ser un servlet ademas en el código no escribí ningún servlet la clase ServletFileUpload es del paquete “org.apache.commons.fileupload.servlet” (apache.commons) no se que hace realmente. lo que haría es simplemente agregar etiquetas img.

  10. 27 aehtiopicus
    agosto 23, 2010 a las 12:50 pm

    Gracias por tu respuesta.

    Yo use las mismas librerias para realizar el fileUpload, pero las implemente en un servlet.
    El problema que encuentro es que, cuando cargas una imagen o archivo no te lo encuentra, si lo pones en un directorio que esta fuera del webapps y si esta dentro del webapps, tenes que hacer un redeploy de la app para que puedas ver lo que cargas.

    De alguna manera, en forma dinámica luego de cargar el archivo lo mostras en la pagina jsp?

    // File archivo_server = new File(“c:/subidos/”+item.getName());

  11. 28 aehtiopicus
    agosto 23, 2010 a las 2:45 pm

    Bueno Amigo,

    Ya encontre la solución a mi problema.
    Cuando subis un archivo y lo almacenas dentro del webapps (no recomendado porque en un undeploy se elimina), tenes que realizar un redespliegue para que tomcat tome los datos.

    Entonces para hacer esto tenes que abrir los archivos situados desde un dir externo… complicado porque el tag no lo soporta. Entonces lo que haces es leer el archivo usando un FileServlet (ImageServelt en mi caso) que te proporcione IO.
    Te dejo de donde saque mi solución.

    http://faq.javaranch.com/java/ImageServlet

    En mi caso subo unas imágenes, y las quiero mostrar luego de subirlas, por lo que no puedo esperar un redeploy.

    Gracias.

  12. 29 Scor11
    noviembre 7, 2010 a las 5:31 pm

    oye disculpa , que debo de hacer cuando me sale esto:
    Exception Details: java.lang.NoSuchMethodError
    org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;

    Possible Source of Error:
    Class Name: org.apache.commons.fileupload.servlet.ServletFileUpload
    File Name: ServletFileUpload.java
    Method Name: parseRequest
    Line Number: 126

    con todos los ejemplos que eh probado me sale ese error y ya tengo todos los .jar que necesita…

    • noviembre 8, 2010 a las 8:26 am

      ese error es rarisimo a mi una vez me salio cuando copie el jar que no era, parace que en la clase “ServletFileUpload.java” nio esta definido el metodo “parseRequest” pero es lo mas raro del mundo estas seguro que copiaste y pegaste igual?… bueno de todas formas yo trabajo con Tomcat 6.x y ahora mismo no puedo testear pero apenas llegue a casa lo hago

      • 31 Scor11
        noviembre 8, 2010 a las 2:25 pm

        si lo copié igual..baje todos los .jar posibles..quité y puse y nada…pero no te preocupes ya pude subir mi archivo el problema ahora es que solo acepta .jpg y .gif y mi proyecto debe aceptar todos los tipos de archivo.. alguna idea de como hacerlo?

        te lo agradecería mucho…!!!

      • noviembre 8, 2010 a las 5:42 pm

        me gustaría mucho ver el código con el que estas trabajando, porque este admite todo tipo de archivos

  13. 33 Scor11
    noviembre 8, 2010 a las 10:17 pm

    este es mi index.jsp
    ———————————-

    <jsp:setProperty name="upBean" property="folderstore" value="” />

    SUBIR ARCHIVO

    <%
    if (MultipartFormDataRequest.isMultipartFormData(request)) {
    MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
    String todo = null;
    if (mrequest != null) {
    todo = mrequest.getParameter("todo");
    }
    if ((todo != null) && (todo.equalsIgnoreCase("upload"))) {
    Hashtable files = mrequest.getFiles();
    if ((files != null) && (!files.isEmpty())) {
    java.text.SimpleDateFormat formato = new java.text.SimpleDateFormat("yyMMddHHmmss");
    String archivo = ((UploadFile) mrequest.getFiles().get("uploadfile")).getFileName();
    int posicionPunto = archivo.indexOf(".");
    String nombreImagen = archivo.substring(0, posicionPunto);
    String extension = archivo.substring(posicionPunto);
    nombreImagen = nombreImagen + formato.format(new java.util.Date());
    nombreImagen = nombreImagen + extension;
    ((UploadFile) mrequest.getFiles().get("uploadfile")).setFileName(nombreImagen);
    UploadFile file = (UploadFile) files.get("uploadfile");
    if (file != null) {
    out.println("El archivo: " + file.getFileName() + " se subio correctamente");
    }
    upBean.store(mrequest, "uploadfile");
    } else {
    out.println("Archivos no subidos");
    }
    } else {
    out.println(" todo=” + todo);
    }
    }
    %>

    ——————————–

    y esta parte sólo para mostrar mi msj de error..

    error.jsp

    ——————————–

    JSP Page

    Solo puede subir .jp y .gif
    Haga click AQUI para retornar

    ————–

    espero si me puedas ayudar…. gracias de antemano.!!!

    • noviembre 8, 2010 a las 11:12 pm

      faltaría upBean y es un poco diferente de la forma que lo hago yo

  14. 35 Scor11
    noviembre 8, 2010 a las 10:58 pm

    ya estuvo…gracias x tu atención.. de rato te molesto!!!

    • noviembre 9, 2010 a las 3:33 pm

      ¿que era?, ¿como lo solucionaste?

  15. 37 Scor11
    noviembre 10, 2010 a las 11:44 am

    si tenias razón me faltaba esto :

    <jsp:setProperty name="upBean" property="folderstore" value="” />

    ……………………………………..

    oye otra pregunta!!!…alguna idea de como forzar la descarga de los archivos….
    digamos que despues de adjuntar, te muestre el link de descarga; le des clic y te de la opcion sólo de descargar…

    Tengo esta linea.. pero lo que hace es que al momento de adjuntar luego me manda el cuadro de dialogo para descargarlo…sin mostrarme el link de descarda antes…

    checa:

    response.setHeader(“Content-Disposition”,”attachment; filename=\””+file.getFileName()+ “\””);

    aah por cierto estoy trabajando = con tu código..!!!!

    de antemano gracias!!!!…

  16. 38 el Osito
    noviembre 11, 2010 a las 11:02 am

    Hola..!! Saben, conseguí subir el archivo…

    Cree en el “C” el directorio “subidos”, quedandome el siguiente PATH:

    C:/subidos

    Esta claro que esa es una dirección definida en el servido, (Me supongo)

    Ahora salta una pregunta y en verdad urgente de resolver. Lo que quiero es subir el archivo no a esa ruta, sino a un http://FTP...!!!

    L siguiente línea de este tutorial es:

    File archivo_server = new File(“c:/subidos/”+item.getName());

    Quiero saber como poner el PATH para que se suba al FTP. Quizas deba crear una conexion al FTP?? O como lo hagooo??? es de urgencia por fa😉 gracias de antemano a TOOODOS😉

  17. 39 el Osito
    noviembre 16, 2010 a las 4:10 pm

    AYUUUUUUUUUUUDAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!! Nadie responde😦

    • noviembre 17, 2010 a las 9:17 am

      pronto te respondo no he tenido tiempo he estado ocupado con muchas expresiones regulares en estos dias pero de seguro mañana te escribo… ok

    • noviembre 17, 2010 a las 9:49 am

      por facebook respondo mas rapido, me llega al celular jejeje

      • 42 el Osito
        noviembre 17, 2010 a las 11:34 am

        Jeje OKI ..!!! Pero cual es tu facebook para escribirte pr alli????

      • noviembre 18, 2010 a las 7:01 am

        http://www.facebook.com/pages/Ingenio-DS/121696387891385

  18. diciembre 9, 2010 a las 1:18 pm

    ola amigo baje la aplicacion pero me sale errores el index esta bien
    el otro jsp subir no me reconoce las librerias….lo estoy aciendo con netbeans

  19. 45 marcosll
    enero 8, 2011 a las 12:36 am

    necesito ayuda..!! tu codigo funciona perfecto … pero ahora enviando mas datos como un input type text en la parte del index.html ya no sirve el getParameter del lado del jsp … esto se realiza de otra forma… pero no logro hacerlo con tu codigo …

    • febrero 14, 2011 a las 10:57 am

      Yo tengo ese problema, consigo subir un archivo, pero no puedo recuperar más parámetros. ¿Alguna ayuda?

      • 47 marcosll
        marzo 4, 2011 a las 7:55 am
  20. 48 aehtiopicus
    enero 27, 2011 a las 6:37 pm

    Hola gente, veo que después de tanto tiempo sirvio para algo el file upload ese que tanto me complico.
    Por desgracia tire a la basura el proyecto, asi que si quieren dejo la última version del sistema para que alguien lo use. mailto:aehtiopicus@gmail.com

    • 49 aehtiopicus
      enero 27, 2011 a las 6:46 pm

      http://elproyectito.blogspot.com/ ahi esta un link donde se puede descargar todo el proyecto y las instrucciones de compilarlo y correrlo, si a alguien le interesa contactese, tal vez podamos seguir.

      tristemente me despido.

  21. febrero 14, 2011 a las 4:58 am

    Muchas gracias llevaba varias días buscando cómo subir un archivo hasta que encontré tu entrada.

    Muy útil y de una forma muy sencilla.

    Un saludo.

  22. 51 juan manuel
    abril 6, 2011 a las 12:34 pm

    Hola Que tal estuve probando tu aplicación y al principio funciono pero después lo volví a probar y me arroja el siguiente error:

    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 15

    12: /*ServletFileUpload esta clase convierte los input file a FileItem*/
    13: ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
    14: /*sacando los FileItem del ServletFileUpload en una lista */
    15: List items = servlet_up.parseRequest(request);
    16:
    17: for(int i=0;i<items.size();i++){
    18: /*FileItem representa un archivo en memoria que puede ser pasado al disco duro*/

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    causa raíz

    javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    org.apache.jsp.subir_jsp._jspService(subir_jsp.java:96)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    No se que paso espero tu respuesta Grasias

    • abril 6, 2011 a las 4:25 pm

      Por alguna razón esta clase “javax.servlet.ServletInputStream” no la encuentra revisa si tienes los paquetes necesarios en tu servidor
      aquí lo puedes conseguir http://www.jarfinder.com/index.php/java/info/javax.servlet.ServletInputStream o de la pagina que recomiendo http://commons.apache.org/io/download_io.cgi

      verifica que el Commons FileUpload jar y el Commons IO jar estén en el directorio WEB-INF/lib de tu aplicación.

      y creo que con eso se debe curar.

  23. 53 3rick
    mayo 18, 2011 a las 12:56 pm

    Gracias por el ejemplo… me funciono…. tremendamente bien! rapido y sencillo.
    no me dio error…. Gracias! salu2 desde Guatemala!

    • mayo 20, 2011 a las 9:21 am

      que bueno, Erick, puedes decir cual es el ambiente en que se está ejecutando. (Sistema operativo, Servidor, IDE si aun lo usas)

    • 55 3rick Aldi
      octubre 5, 2011 a las 1:11 am

      Algo tarde mi respuesta jeje…. pues lo estoy usando en Ubuntu… y solo cambie la ruta de las imágenes de windows c:/subidos por–> /tmp/subidos y listo, funciona muy bien, y estoy usando netbeans 6.9.1 y apache tomcat 7; igual lo probé en Windows y sirve de igual manera, creo que los bugs a veces están a la hora de jalar las librerías que ayudan a la subida de los archivos. Salu2

  24. 56 Enrique López
    junio 21, 2011 a las 11:00 pm

    hola al parecer a estado abandonado el post de comentarios jejeje
    Mi pregunta es la siguiente:
    En el tomcat me salta el siguiente error
    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 20

    17: for(int i=0;i<items.size();i++){
    18: /*FileItem representa un archivo en memoria que puede ser pasado al disco duro*/
    19: FileItem item = (FileItem) items.get(0);
    20: File file=new File(item.getName());
    21: File nuevoPath= new File("C:/Archivos de programa/Apache Software Foundation/Tomcat 6.0/webapps/Cinearmas/subidos/"+file.getName());
    22: item.write(nuevoPath);
    23: /*item.isFormField() false=input file; true=text field*/

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:519)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    causa raíz

    java.lang.NullPointerException
    java.io.File.(File.java:222)
    org.apache.jsp.subir_jsp._jspService(subir_jsp.java:78)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    Cuando lo probo corrio genial pero ahora no funciona las librerias estan en la carpetay todo y no se que es lo que pasa.

    • junio 22, 2011 a las 8:21 am

      Al parecer, item tiene el valor de null, verifica tu formulario ¿en el enctype que valor tiene?.

      • 58 Enrique López
        junio 22, 2011 a las 7:24 pm

        cuando coloco el enctype=”MULTIPART/FORM-DATA” en la JSP realizo un request.getParameter del input file
        y me sale null, al igual que en tu ejemplo coloque un request.getParameter del input file y me sale null.
        pero retiro el enctype=”MULTIPART/FORM-DATA” y con el request me manda el nombre de la imagen ó archivo
        De antemano gracias.

      • junio 23, 2011 a las 7:58 am

        Listo, Enrique si no es mucho pedir podrías mostrar tu código. pues el formulario y el que busca el nombre de los archivo solo esos dos fragmentos. para que a la gente que de pronto le pase algo así se pueda ubicar más fácilmente.

      • 60 Enrique López
        junio 23, 2011 a las 10:36 pm

        :::::::::::::::::::::::::::::::::::Código del del formulario.jsp::::::::::::::::::::::::::::::::::::::::::::::::::

        :::::::::::::::::::::::::::::::::::Código del de subir.jsp::::::::::::::::::::::::::::::::::::::::::::::::::
        String Prueba =request.getParameter(“file”);
        FileItemFactory file_factory = new DiskFileItemFactory();
        ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
        List items = servlet_up.parseRequest(request);
        for(int i=0;i ” + item.getName() );
        out.print(” Tipo –> ” + item.getContentType());
        out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);
        out.print(“”);
        out.print(prueba);////////ESTE ES EL QUE ME DICE NULL PERO AUN ASI AGREGA EL ARCHIVO A LA CARPETA
        out.print(nuevoPath.getAbsolutePath()+””);
        out.print(file.getAbsolutePath());
        }
        //////Este es el de tu archivo\\\\\\\
        En este no me manada nada de Excepciones pero en este:
        http://homechicks.dyndns.org:8080/Cinearmas/altapelicula.txt<—–Aqui esta el formulario con el enctype(linea 114)
        http://homechicks.dyndns.org:8080/Cinearmas/pelis.txt<—— Y esta es la JSP a donde se envian los datos del formulario y me marca el java.lang.NullPointerException en la linea 50.
        ahi esta mi estimado ingenioDS todas las variables que coloco en el de pelis.txt las necesito para agregar a la Base de datos y de la imagen solo quiero el nombre o si tienes algo que no me marque el error estaria mejor Nos vemos Gracias a todos !!!XD
        PD: Me dicen si no funcionan los links

      • junio 24, 2011 a las 8:26 am

        Gracias.

  25. 62 Enrique López
    junio 21, 2011 a las 11:04 pm

    hola al parecer a estado abandonado el post de comentarios jejeje
    Mi pregunta es la siguiente:
    En el tomcat me salta el siguiente error
    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 20
    20: File file=new File(item.getName());
    java.lang.NullPointerException
    java.io.File.(File.java:222)
    org.apache.jsp.subir_jsp._jspService(subir_jsp.java:78)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    Cuando lo probe corrio genial pero ahora no funciona, las librerias estan en la carpeta y todo y no se que es lo que pasa.

  26. 63 leobardo448
    agosto 3, 2011 a las 9:43 pm

    hola, yo lo monte en el tomcat 6 en ubuntu 10.04 casi todo funciona solo por un error no c que podria ser, solo cambie la ruta del directorio a una carpeta dl tomcat del proyecto pro no guarda la imagen ni aunque la guarde nl escritorio, ¿Qué puedo hacer? gracias x tus codigos.

    Ha tenido lugar un error en la l�nea: 27 en el archivo jsp: /subir.jsp
    String literal is not properly closed by a double-quote
    24: if (! item.isFormField()){
    25:
    26: /*cual sera la ruta al archivo en el servidor*/
    27: File archivo_server = new File(“/usr/local/tomcat/apache-tomcat- 6.0.18/webapps/Prueba/””+item.getName());
    28: /*y lo escribimos en el servido*/
    29: item.write(archivo_server);
    30:

    • agosto 4, 2011 a las 8:11 am

      El error pues no se pero por lo pronto la excepcion que te lanza está en la linea 27
      27: File archivo_server = new File(“/usr/local/tomcat/apache-tomcat- 6.0.18/webapps/Prueba/“”+item.getName());

      File archivo_server = new File(“/usr/local/tomcat/apache-tomcat- 6.0.18/webapps/Prueba/+item.getName());

      tienes una doble comilla.

  27. 65 leobardo448
    agosto 4, 2011 a las 6:15 pm

    Si grax, vi mi error lo corregi pro no se visualiza la imagen que se carga en el navegador solo muestra los datos d la imagen, apenas stoy dando mis pininos en jsp, me gusta la parte de la programacion que podria agregarle para ke se cargue la imagen y la muestre, grax x tu ayuda.

  28. 66 Rach
    agosto 18, 2011 a las 2:40 pm

    Hola, he seguido tu codigo y todo funciona perfecto, pero la lista resultante me sale vacia.
    Sabes cual podria ser una causa?
    Ya he comprobado que si recibe el parametro.
    De ante mano, gracias!!

  29. agosto 22, 2011 a las 8:17 am

    pero el tipo de formulario

    el enctype debe ser ese (MULTIPART/FORM-DATA)

  30. 68 andres anrrango
    agosto 22, 2011 a las 7:26 pm

    hola, tengo una duda con respecto al guardar la imagen, en mi caso me funciona todo bien pero mi problema es que cuando voy a otra maquina tengo que cambiar la direccion de la carpeta para guardar la imagen y me toca entrar al codigo y cambiarla manualmente,

    File archivo_server = new File(“C:/Users/Andres/Documents/NetBeansProjects/subirImagen/web/subidos/”+item.getName());

    ¿Hay alguna forma de guardar las imagenes dentro de mi proyecto para no tener que cambiar la direccion cada vez que cambie de maquina?

  31. 69 Idadyou
    septiembre 19, 2011 a las 8:36 pm

    Muchas gracias por ese gran aporte..

  32. 70 david
    septiembre 22, 2011 a las 6:36 pm

    Gracias funciono a la perfección, NO tiene errores, probado en netbenas con apachetomcat

    • septiembre 23, 2011 a las 8:27 am

      Gracias David. por lo del entorno donde lo ejecutaste.

  33. 72 ingsis
    septiembre 28, 2011 a las 11:08 am

    Hola ingeniods, sabes estoy guardando la ruta de la imagen en m bd pero tengo un problema el formulario del input lo cargo en un div y no deseo que se me recargue lapagina he usado ajax y nada sera que no existe ninguna forma de subir la imagen al disco sin recargar?

    • septiembre 28, 2011 a las 11:43 am

      Pues, con Ajax debería funcionar como lo deseas, habría que revisar la implementación que estas haciendo

  34. 74 ingsis
    septiembre 29, 2011 a las 11:14 pm

    Hola, , con tu codigo existe alguna manera para que no recargue pues e intentado y si el action no esta no hace nada es decir dentro de un div (estoy trabando en jsp)

    • septiembre 30, 2011 a las 8:51 am

      Para hacer eso te tocaría:
      1. Hacer una pagina que solo suba los archivos
      2. En tu pagina hacer por fuera un formulario que sea para subir el documento
      3. A ese formulario para subir documento (no se si con el ID de la session) un parámetro para identificar los documentos que subes
      4. utilizar Ajax.
      seria copiar y pegar lo que en esta pagina hay (http://www.miguelmanchego.com/2009/subir-archivos-usando-ajax-jquery/) pero la pagina que procesa el archivo ya no será la que ahí sino la que escribiste en el punto 1

      • 76 ingsis
        octubre 1, 2011 a las 11:09 pm

        Hola Miguel te escribo al correo

  35. 77 ingsis
    octubre 3, 2011 a las 8:03 pm

    Disculpa Ingeniods, te envie un e-mail por fa revisalo. Gracias

  36. 78 junniorcito
    octubre 25, 2011 a las 11:56 am

    excelente man!!! me sirvio mucho pa un proyecto

  37. 79 alejandro
    diciembre 5, 2011 a las 3:40 pm

    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /pruebas.jsp en línea 67

    64: // algunos solo pasan el nombre del fichero subido, pero otros
    65: // como Iexplorer, pasan la ruta absoluta, y esto crea un pequeño problema al escribir
    66: // el fichero en el servidor.
    67: item.write(new File(destino,file.getName()));
    68: out.println(“Fichero subido”);
    69:
    70: }

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    causa raíz

    java.io.FileNotFoundException: C:\Biblioteca\Imágenes \Imágenes de muestra\Desert.jpg (El sistema no puede encontrar la ruta especificada)
    java.io.FileOutputStream.open(Native Method)
    java.io.FileOutputStream.(Unknown Source)
    java.io.FileOutputStream.(Unknown Source)
    org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:390)
    org.apache.jsp.pruebas_jsp._jspService(pruebas_jsp.java:127)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

    me podria ayudar a resolver este problema que tengo por favor.

    • diciembre 7, 2011 a las 8:03 am

      Estas seguro que la dirección donde estas tratando de guardar el archivo existe

  38. 81 alejandro
    diciembre 5, 2011 a las 3:44 pm

    Insert title here

    Fichero

    <%
    //Ruta donde se guardara el fichero
    File destino=new File("C:\\Archivos de programa\\Apache Software Fundation\\Tomcat 7.0\\webapps\\ROOT\\");
    // 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()+"”);
    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”);

    }
    }
    }

    %>

    este es el codigo que utilice.

  39. 82 wilson
    diciembre 8, 2011 a las 10:43 pm

    probe el codigo, pero me arroja el siguien error

    Ha tenido lugar un error en la línea: 10 en el archivo jsp: /s1.jsp
    FileItemFactory cannot be resolved to a type
    7:
    8: MiProyecto
    en este directorio tengo el index.jsp y el subir.jsp y el lib lo tengo dentro web inf pero no he logrado arreglarlo…

    • diciembre 9, 2011 a las 8:25 am

      parece que no has importado correctamente las bibliotecas

      • 84 wilson
        diciembre 10, 2011 a las 1:52 pm

        cuales bibliotecas, ya hecho de todo pero no me funciona… le agradezco me heche una mano…

      • diciembre 12, 2011 a las 1:04 pm

        dentro de la carpeta lib deben estar los jar. ya sea la del tomcat o la de tu aplicación.

  40. diciembre 17, 2011 a las 4:03 pm

    hey. graciaspor tu ejemplo de echo me sirvio bastante, me salio a la priomera. pero ahora mi duda es como puedo visualizar loq ue he subido, es decir. una vez que ya subimos la imagen digamos, yo coloque un boton (afiguradamente) para que me muestre un jsp / html con la direcion de la imagen es decir esto y nadamas (en otras palabras ver lo que cargue al servidor) el problema ocurre que no me encuentra la imagen aun en raiz. de hecho me tomma la direcion como si fuese una carpeta el nombre C:\.
    asi me lo muestra al buscar la direcion de la imagen localhost:8084/ejemplo/C:/subidos/ima1.jsp
    veo que lo que hace es mostrarme un objeto de dicha direccion, y no me la toma desde la raiz. que puedo hacer. por cierto ando usando netbeans para hacer este ejemplo,

    • diciembre 29, 2011 a las 3:53 pm

      debes poner la ruta de los archivos que subes dentro de tu proyecto, y luego al leerla le quitas la parte que desees con un direccion=direccion.replaceFirst();

  41. 88 josh
    diciembre 29, 2011 a las 10:35 am

    Muy buen aporte, salio perfectamente

  42. 89 Andre
    enero 2, 2012 a las 1:20 am

    Tengo un problema con el programa me sale un error 500 en la linea de item.write(archivo_server);

    • enero 2, 2012 a las 8:32 am

      Andre, lo que puedes hacer es proveer más información del error, ya sabemos que es interno al servidor pero… que tal está tomcat de permisos ¿si puede escribir en el disco?

      • 91 Andre
        enero 2, 2012 a las 11:14 am

        la verdad nose aka dejo el error

        El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

        excepción

        org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 27

        24: /*cual sera la ruta al archivo en el servidor*/
        25: File archivo_server = new File(“c:/subidos/”+item.getName());
        26: /*y lo escribimos en el servido*/
        27: item.write(archivo_server);
        28: out.print(“Nombre –> ” + item.getName() );
        29: out.print(” Tipo –> ” + item.getContentType());
        30: out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);

        Stacktrace:
        org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:519)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

        causa raíz

        java.io.FileNotFoundException: c:\subidos\C:\Users\Wizard\Documents\prueba\prubasubir.jpg (El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos)
        java.io.FileOutputStream.open(Native Method)
        java.io.FileOutputStream.(Unknown Source)
        java.io.FileOutputStream.(Unknown Source)
        org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:439)
        org.apache.jsp.subir_jsp._jspService(subir_jsp.java:85)
        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

        nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/6.0.32.

      • enero 2, 2012 a las 12:42 pm

        el error es el siguiente, la dirección del archivo que estas tratando de subri es “c:\subidos\C:\Users\Wizard\Documents\prueba\prubasubir.jpg” debería ser “C:\Users\Wizard\Documents\prueba\prubasubir.jpg”

  43. 93 Miguel Angel
    enero 10, 2012 a las 1:53 pm

    Hola! estoy intentando implementarlo pero en cuanto pongo el formulario multipart/form-data nose porque pero el servlet se me cuelga, no me carga ni hace nada se queda con pantalla blanca. El form lo tengo bien creo yo tal que asi:

    en el servlet he de añadirle algo en especial para que no falle?

    gracias

    • enero 10, 2012 a las 2:50 pm

      en que falla?

      • 95 Miguel Angel
        enero 11, 2012 a las 12:16 pm

        Pues si le pongo al formulario lo del multipart/form-data ya no me envía a donde me redirecciona bien, se me queda abierto la pagina en blanco con la direccion del servlet. En cambio si no pongo lo de multipart me redirecciona perfecto pero claro, no me funciona el archivo para subir así.

      • 96 Miguel Angel
        enero 13, 2012 a las 8:52 am

        podría ser el fallo que mi formulario tiene tanto selects, radios, textarea y files? Es imcopatible con los input radio?

      • enero 13, 2012 a las 9:14 am

        Miguel Angel donde estoy son las 9:15 estoy en horario GTM-5 me conecto al FB y MSN a la 1pm

      • 98 wilson
        enero 16, 2012 a las 12:51 pm

        hola, tengo un problema, me funciona bn esto codigo, pero ahora lo estoy pasando a un proyecto con una bd en postgres y se cualga, y me arroja este error…

        org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /upload.jsp en línea 26

        23: for(int i=0;i<items.size();i++){
        24: /*FileItem representa un archivo en memoria que puede ser pasado al disco duro*/
        25: FileItem item = (FileItem) items.get(0);
        26: String n[] =item.getName().replace("\\","-").split("-");
        27: String nombreReal=n[n.length-1]; //nombre real del archivo para guardar

      • enero 19, 2012 a las 8:26 am

        no parece ser la base de datos… creo que si quitas la parte donde se guardan los datos igual generaría la exception

      • 100 wilson
        enero 19, 2012 a las 11:31 am

        no, si quito esta parte del codigo, los datos se guardan… loq ue no me deja es adjuntar el archivo…

      • enero 20, 2012 a las 9:34 am

        por favor escribe la excepcion completa.

  44. 102 Miguel Angel
    enero 20, 2012 a las 8:59 am

    Hola! ya conseguí arreglarlo, te comento hay un par de errores en tu código!

    1- La versión que bajamos desde esta misma pagina no es la misma que la de las capturas que hay hay un error simple en subidos.jps :
    19 FileItem item = (FileItem) items.get(0); // Esta a 0 en vez de poner la variable i

    2- Por otro lado el código falla si quieres subir mas de un input file en el formulario y alguno de ellos no estas obligado a poner un archivo en concreto (que lo puedes dejar sin escoger nada), como no comprueba que no se haya escogido peta cuando ocurre eso. Lo he solucionado despues de comprobar si es un input file o no
    he añadido un if(!item.getName().equals(“”)) , es decir el código final me ha quedado así:

    <%
    /*FileItemFactory es una interfaz para crear FileItem*/
    FileItemFactory file_factory = new DiskFileItemFactory();

    /*ServletFileUpload esta clase convierte los input file a FileItem*/
    ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
    /*sacando los FileItem del ServletFileUpload en una lista */
    List items = servlet_up.parseRequest(request);

    for(int i=0;i ” + item.getName() );
    out.print(” Tipo –> ” + item.getContentType());
    out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);
    out.print(“”);
    }
    }
    }
    %>

    Espero que sirva para alguno más😉

    • 103 Miguel Angel
      enero 20, 2012 a las 9:01 am

      No Entro todo el codigo sigo desde el for:

      for(int i=0;i ” + item.getName() );
      out.print(” Tipo –> ” + item.getContentType());
      out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);
      out.print(“”);
      }
      }
      }

      • 104 Miguel Angel
        enero 20, 2012 a las 9:03 am

        1: for(int i=0;i ” + item.getName() );
        12: out.print(” Tipo –> ” + item.getContentType());
        13: out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);
        14: out.print(“”);
        15: }
        16: }
        17:}

    • 105 Miguel Angel
      enero 20, 2012 a las 9:07 am

      No me deja poner el código os lo dejo aquí ->>


      <%
      /*FileItemFactory es una interfaz para crear FileItem*/
      FileItemFactory file_factory = new DiskFileItemFactory();

      /*ServletFileUpload esta clase convierte los input file a FileItem*/
      ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
      /*sacando los FileItem del ServletFileUpload en una lista */
      List items = servlet_up.parseRequest(request);

      for(int i=0;i " + item.getName() );
      out.print("
      Tipo --> " + item.getContentType());
      out.print("
      tamaño --> " + (item.getSize()/1240)+ "KB");
      out.print("
      ");
      }
      }
      }
      %>

      • 106 wilson
        enero 20, 2012 a las 12:20 pm

        Gracias Miguel Angel… El Codigo esta perfecto, Igual Ingenio DS el post esta genial… gracias…

    • enero 21, 2012 a las 10:52 am

      validas las anotaciones pero en el codigo pongo 0 porque solo tengo un input, aunque lo corrijo lo más pronto posible; otra cosa que sucede es que en mis post siempre hago el caso feliz porque la idea es hacer algo que funcione y que vaya directo al grano.

      De todas formas muchas gracias Miguel Angel

  45. 108 Miguel Angel
    enero 20, 2012 a las 3:41 pm

    Un placer wilson todo sea compartir😉 y genial el post Igenio DS

  46. 109 Dayron Alexis
    mayo 1, 2012 a las 8:47 pm

    Hola ingenio DS…
    Soy muy nuevo con las aplicaciones JSP y me ocurre el siguiente problema…
    pero reitero que e precticado con las otras aplicaciones y han sido excelentes y muy facil de aprender…
    te agradesco mucho por compartir tu conocimiento con los demas…
    bueno…
    el error es el siguiente…

    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 25

    22: /*cual sera la ruta al archivo en el servidor*/
    23: File archivo_server = new File(“c:/subidos/”+item.getName());
    24: /*y lo escribimos en el servido*/
    25: item.write(archivo_server);
    26: out.print(“Nombre –> ” + item.getName() );
    27: out.print(” Tipo –> ” + item.getContentType());
    28: out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:460)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

    causa raíz

    java.io.FileNotFoundException: c:\subidos\C:\Documents and Settings\Administrador\Escritorio\tarea.txt (El nombre de archivo, directorio o etiqueta del volumen no es válido)
    java.io.FileOutputStream.open(Native Method)
    java.io.FileOutputStream.(Unknown Source)
    java.io.FileOutputStream.(Unknown Source)
    org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:416)
    org.apache.jsp.subir_jsp._jspService(subir_jsp.java:92)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

    bueno…
    yo estoy utilizando eclipce + tomcat…
    o es que me hace falta agregar algo o q…
    por que no entiendo como solucionarlo…
    agregue las las librerias al buil path y no…
    porfavor…
    ¿Esta aplicacion me puede sirve para subir archivos txt u otro tipo de archivo?

    • mayo 2, 2012 a las 8:39 am

      Dayron, el problema es que al momento de obtener el nombre está leyendo la ruta completa al archivo y no el nombre de este:

      o sea esta leyendo “C:\Documents and Settings\Administrador\Escritorio\tarea.txt” para que funciones debes leer solamente el “tarea.txt”; para que la dirección donde se intente escribir sea “c:\subidos\tarea.txt” en vez de “c:\subidos\C:\Documents and Settings\Administrador\Escritorio\tarea.txt”

      • 111 Dayron Alexis
        mayo 2, 2012 a las 8:06 pm

        Ingeniods…
        Muchas gracias me sirvió me muchísimo tu ejemplo…
        Te agradezco por tu aporte a los aprendices…
        Me funciono perfecto…
        solo tenia un errorcito que se cuadraba cambiándole el método…
        ojala tengas muchísimos mas aportes…

  47. 112 Dayron Alexis
    mayo 2, 2012 a las 11:14 am

    Y como lo puedo solucionar…
    debo cambiar algun metodo…

  48. 113 wilson
    mayo 2, 2012 a las 3:27 pm

    estoy tratando de subir un archivo… como dato adjunto… hice un form ingreso los datos y el archivo adjunto…
    pero a la hora de insertar los datos me arroja un error…. el archivo adjunto queda en la direccion que le di, pero los datos no los ingresa…. me pueden echar una manito, con estooo…

    • mayo 3, 2012 a las 8:30 am

      Wilson es por el enctype=”MULTIPART/FORM-DATA” debes utilizar el uno que especifica enctype=”multipart/mixed” para que envíe tanto textos como archivos

  49. 115 wilson
    mayo 3, 2012 a las 9:11 am

    Gracias… pero ahora me sale este error….

    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /prueba2.jsp en línea 20

    17: /*ServletFileUpload esta clase convierte los input file a FileItem*/
    18: ServletFileUpload servlet_up = new ServletFileUpload(file_factory);
    19: /*sacando los FileItem del ServletFileUpload en una lista */
    20: List items = servlet_up.parseRequest(request);
    21:
    22: for(int i=0;i<items.size();i++){

    y luego de que haga esto, para que una persona envie el archivo adjunto a otra persona ella lo pueda descargar… como puedo hacer, es que en esto no tengo mucho conocimiento…
    le agradezco su ayuda de antemano….

    • mayo 4, 2012 a las 8:41 am

      en el comentario número 94 (https://ingeniods.wordpress.com/2010/04/27/subir-archivos-en-jsp/#comment-531) aclaran algo que puede estar pasando… si no mañana a las 2pm hora colombiana hacemos una vídeo conferencia y arreglamos eso

  50. 117 wilson
    mayo 4, 2012 a las 11:25 am

    Miguel Angel….

    en el for debe haber un error…

  51. 118 wilson
    mayo 5, 2012 a las 2:28 pm

    ingeniods… necesito de su ayuda… por que no he podido solucionar mi problema..
    Gracias…

    • mayo 7, 2012 a las 8:50 am

      estuve conectado, respondiendo algunas preguntas en el livestream, por facebook pues no sé cuando cuadramos

  52. 120 andres
    mayo 22, 2012 a las 12:23 pm

    Buenas tarde
    tengo el siguiente error
    org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /subir.jsp en línea 25

    22: /*cual sera la ruta al archivo en el servidor*/
    23: File archivo_server = new File(“c:/subidos/”+item.getName());
    24: /*y lo escribimos en el servido*/
    25: item.write(archivo_server);
    26: out.print(“Nombre –> ” + item.getName() );
    27: out.print(” Tipo –> ” + item.getContentType());
    28: out.print(” tamaño –> ” + (item.getSize()/1240)+ “KB”);

    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

    causa raíz

    java.io.FileNotFoundException: c:\subidos\C:\Users\Proyecto\Desktop\Colegio\web\images\MARVIN.jpg (El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos)
    java.io.FileOutputStream.open(Native Method)
    java.io.FileOutputStream.(FileOutputStream.java:212)
    java.io.FileOutputStream.(FileOutputStream.java:165)
    org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:439)
    org.apache.jsp.subir_jsp._jspService(subir_jsp.java:92)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

    nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.22.

    • mayo 22, 2012 a las 7:13 pm

      Andres el error ha sucedido a varias personar, en el comentario 83, 84, 101 y 102 se habla del mismo error

  53. 122 julio
    mayo 24, 2012 a las 5:28 pm

    hola, oye acabo de probar tu codigo y me marca error dice The requested resource () is not available.
    estoy utilizando netbeasn 7.0 gracias de antemano

    • 123 julio
      mayo 24, 2012 a las 6:01 pm

      oye ya resolvi el problema y el codigo funciona de maravilla graicas!!!

      • mayo 24, 2012 a las 7:12 pm

        Julio cual era el error y como lo resolviste?

      • 125 aintzane
        mayo 29, 2012 a las 5:59 am

        ¡¡Buen tutorial!! Me funciona sin problemas. Ahora mi duda es: quiero calcular la velocidad de subida, pero para ello necesito obtener el tiempo que le cuesta al archivo subir al servidor. La velocidad de subida se obtendría dividiendo el tamaño del archivo (ese dato ya lo tengo, item.getSize()) entre el tiempo que le cuesta subir al servidor. Entonces, ¿cómo podría obtener ese tiempo?

        He probado a hacer lo siguiente:

        int contador = 0;
        /* Y lo escribimos en el servidor*/
        item.write(archivo_server);
        contador++;

        double v = (((item.getSize())/contador++)/100.0);

        out.print(” Ruta: ” + item.getName()); // Ruta donde se encuentra el archivo que hemos subido
        out.print(” Tipo: ” + item.getContentType());
        out.print(” Tamaño: ” + (item.getSize()/1240) + ” Kb”);
        out.print(“La velocidad de subida es de: “+ v +” Kbps”);
        out.print(“”);

        Pero no sé si ese es el valor correcto, si el tiempo está mal calculado poniendo ese contador ahí. Al ejecutar me funciona y me calcula la velocidad, pero no se si está bien calculado ese tiempo o no.

        Ayuda xfaa!! Gracias!!

      • 126 wilson
        junio 13, 2012 a las 8:59 am

        Buenos Dias Ingenio, es que tengo un input file, envio el formulario, pero no se como obtener la ruta del archivo del input…. me puede ayudar…

        Gracias…

      • junio 14, 2012 a las 8:37 am

        la ruta del archivo dependiendo del explorador es incluso temporal, no creo que saber la ruta al archivo en el cliente sea útil… incluso ni siquiera lo he intentado.

  54. 128 jvilchis
    junio 25, 2012 a las 3:21 am

    corre de lujooooo grx

  55. 129 juernes
    julio 12, 2012 a las 11:54 am

    como cambio la ruta C:/subidos por una ruta http del servidor….

  56. 130 juernes
    agosto 1, 2012 a las 8:08 pm

    aqui nadie contesta…

    • agosto 2, 2012 a las 5:32 pm

      estuve enfermo unos 15 días pero ya regresé

      • 132 juernes
        agosto 2, 2012 a las 6:04 pm

        que pena… ofrezco mis disculpas…
        IngenioDS Que se MEjoro lo mas pronto…
        es que quiero subir el archivo pero a hosting y en la ruta…

  57. 133 juernes
    agosto 2, 2012 a las 6:05 pm

    coloco la ruta “./subidos/”+getName(); pero me dice que el directorio no existe…

    • agosto 2, 2012 a las 7:09 pm

      es que nunca he intentado subir un archivo a una url siempre lo he hecho a una ruta física en el disco duro. pero indagaré entre mis compañeros para ver quien sabe hacer eso

  58. 135 juernes
    agosto 2, 2012 a las 11:22 pm

    le agradezco… por que no he podido lograr hacerlo… tengo un acceso directo al proyecto en el hosting… y por mas direcciones que le de no lo he podido lograr…

  59. 136 Maferzhiita
    agosto 7, 2012 a las 9:51 am

    hola..
    super biien tu tuto solo que tengo un proyecto me pidieron subir la imagenes desde web a una bd..
    prodrias mandarme este archivo para chekarlo te lo agradeceria!!
    mortiz_tsu@hotmail.com

  60. 137 Olaff
    agosto 15, 2012 a las 10:52 pm

    Hola una pregunta modifique un poco tu codigo , el chiste es que cuando quiero subir me archivo me dice acceso denegado si mepuedes ayudar te lo agradeceria

    • agosto 21, 2012 a las 8:34 am

      parece que es una cuestión de permisos más que de código

      • 139 Jean Pierre
        mayo 30, 2013 a las 11:44 pm

        disculpa, me sucede lo mismo me da acceso denegado a la ruta, se agradeceria, me dijeras a que archivo hay que cambiarle el permiso para que funcione. saludos cordiales.

      • mayo 31, 2013 a las 8:28 am

        Es eso, tienes que darle permisos al usuario con que inicia tu tomcat para escribir en dicha ruta, o escribir en una ruta que sea pública

  61. agosto 23, 2012 a las 11:18 am

    Hola, una preguntita. Estoy implementando tu código con Eclipse y Jboss y Struts 1. El problema es que cuando ejecuto esta línea -> List items = servlet_up.parseRequest(request); la lista queda vacía.

    Leyendo vi que otros resolvieron colocando el atributo enctype=”MULTIPART/FORM-DATA” en el formulario, pero yo también lo tengo y nada, la lista queda vacía.

    Con la librería FormFile de struts me funciona bien pero para un archivo porque probando con la subida de varios archivos la aplicación se comporta mal y de hecho me da timeout leyendo el MULTIPART.

    Agradezco si alguien tiene idea de lo que pueda estar pasando con la lista que queda vacía😦

  62. 142 Aoi
    octubre 11, 2012 a las 3:10 pm

    Funciona perfecto IngenioDS muchas Gracias (y) ¿Sabes de algún servicio de Hosting que soporte JSP y Servlets, ya sea gratuito o de pago?

    • octubre 11, 2012 a las 7:02 pm

      has probado GAE?

  63. 144 Jose clemente Orozco
    noviembre 25, 2012 a las 3:54 pm

    EXCELENTE tuto, funciona al 100% ya lo probé y funcionó sin problema, lo único que falta aclarar es el nombre correcto de las librerias a agregar y cómo agregarlas, pues quienes sepan menos que nosotros probablemente no lo entiendan. Pero muchas gracias, muy buen tuto.

  64. 145 Gabriel
    noviembre 28, 2012 a las 1:48 pm

    olas! como podria despues de subir la imagen mostrarla en subir.jsp????

    • noviembre 29, 2012 a las 3:02 pm


      out.print(" < img src=' /subidos/"+item.getName()+"'&bt; ");
      creo que agregando esta línea debe funcionar en local

  65. 147 ere
    enero 23, 2013 a las 11:16 am

    mira yo desarrolle un proyecto similar al tuyo, pero me tope con un problema como el que comentaron arriba, efectivamente el archivo lo sube a una carpeta fuera del proyecto es decir ubicada en mis documentos o en C:, pero cuando la quiero mandar a llamar para presentarla en un slide de imágenes no me las muestra, leyendo los comentarios tu le respondiste esto a: Gck Wolf Jack

    debes poner la ruta de los archivos que subes dentro de tu proyecto, y luego al leerla le quitas la parte que desees con un direccion=direccion.replaceFirst();

    pero sinceramente no entendí, ojala pudieras ayudarme te lo agradecería mucho.

  66. 148 william
    mayo 30, 2013 a las 3:02 pm

    Buen diá, Queria pedirles de favor ayuda en un dificultad que tengo para subir imagenes con jsp.
    Estoy trabajando con Netbeans IDE 7.0
    Mi dificultas es que si puedo subir imagenes pero solo cuando le doy una ruta especifica del disco duro : String dirName = “D:\\Imagenes\\”;
    Yo quiero q suba a un directorio que esta en la misma aplicacion web.
    Gracias por su atencion.

    • mayo 31, 2013 a las 8:32 am

      IMGSFOLDER=application.getRealPath(“/shared/cargas/”);

  67. 150 ljesuscastrog
    julio 24, 2013 a las 12:28 pm

    Excelente aporte… tenia problemas al principio… pero mi problema era por las versiones de los jar, porque yo los descague desde los links que venian ahi, pero intente con los que venian en la carpeta del proyecto y ya con eso se ha solucionado.

    Gracias

  68. agosto 4, 2013 a las 11:39 pm

    disculpa ya estando el sitio en linea para poner la ruta de la imagen ya no es c:/,,,, cual seria la url ay😀

  69. 152 irvin
    diciembre 8, 2013 a las 3:21 am

    Hola buenas deseo subir una imagen y que al cerrar la aplicacion y luego al ejecutarla nuevamente la imagen se encuentre , el problema hasta el momento que logro subir imagenes y se me muestran pero al cerrar y volver a ejecutar ya no me salen y voy al build de la aplicacion y si esta la imagen utilizo netbeans 7.3 con apache 7 jsp si me puede ayudar se los agradecere mucho. spychirguin@yahoo.com

  70. 153 Rubén
    abril 17, 2014 a las 4:36 am

    Buenos días:
    Tengo un problema, quiero pasar por un post un fichero para subir y una variable. Si utilizo enctype=”multipart/form-data” me sube el fichero y la variable va null y si pongo enctype=”multipart/mixed” oenctype=”text/plain” el fichero no lo sube pero si me reconoce la variable. ¿como puedo hacer las dos cosas a la vez?
    Muchas Gracias

  71. 154 Marco
    abril 24, 2014 a las 5:58 pm

    Excelente post amigo, me ayudo bastante. Gracias!!

  72. 155 david
    julio 22, 2014 a las 2:43 pm

    como subir un fileupload y un texto, lo que pasa es que trato de hacer una alta de usuarios pero no puedo hacer las dos cosas en el mismo codigo por que tengo que poner el multipart/form-data y los textos no los puedo mandar y si lo quito no puedo subir el fileupload

  73. 156 Diego
    diciembre 1, 2014 a las 7:45 am

    Hola muy bueno el tuto pero solo me funciona con el netbeans abierto, cuando lo subo a un servidor apache me da este error..

    org.apache.jasper.JasperException: No se puede compilar la clase para JSP:

    Ha tenido lugar un error en la línea: 12 en el archivo jsp: /subir.jsp
    FileItemFactory cannot be resolved to a type
    9:
    10: <%
    11: /*FileItemFactory es una interfaz para crear FileItem*/
    12: FileItemFactory file_factory = new DiskFileItemFactory();
    13:
    14: /*ServletFileUpload esta clase convierte los input file a FileItem*/
    15: ServletFileUpload servlet_up = new ServletFileUpload(file_factory);

    cual es solución?

  74. mayo 20, 2015 a las 2:11 am

    Que tal. Tengo un pregunta en dado caso que quisiera que el directorio fuera dentro del proyecto, como es que escribo la direccion, sin marcar la ruta completa desde C:/ …../uploadFiles Lo he intentado y me marca error al decirme que no encuentra la ruta. Saludos y gracias.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 348 seguidores

Ingenio DS en Facebook

Redes Sociales y Archivos

Entradas

abril 2010
L M X J V S D
« Mar   May »
 1234
567891011
12131415161718
19202122232425
2627282930  

IngenioDS en twiter


A %d blogueros les gusta esto: