Foros del Web » Programación para mayores de 30 ;) » Java »

Subir un fichero con jsp

Estas en el tema de Subir un fichero con jsp en el foro de Java en Foros del Web. Hola, estoy intentando hacer un formulario para que un usuario pueda subir un fichero a una carpeta concreta del servidor donde se encuentra la aplicacion. ...
  #1 (permalink)  
Antiguo 19/05/2010, 06:32
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Subir un fichero con jsp

Hola, estoy intentando hacer un formulario para que un usuario pueda subir un fichero a una carpeta concreta del servidor donde se encuentra la aplicacion. ´He puesto lo siguiente:

<form action="web.jsp" method"post" enctype="multipart/form-data">
<input type="file" name="carga"/>
<input type="submit" name="Subir"/>
</form>

Pero no sé cómo especificar en el formulario ( o donde corresponda) el directorio al que quiero que se suban los ficheros de los usuarios.
En el foro de HTML ya me habian dicho una forma con PHP pero el problema es que tiene que ser en JSP. ¿Alguien me puede ayudar, por favor?
  #2 (permalink)  
Antiguo 19/05/2010, 13:59
 
Fecha de Ingreso: diciembre-2008
Ubicación: Bogota
Mensajes: 149
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Subir un fichero con jsp

hola ps la verdad no he leido el de php pero si puedes usar una libreria q se llama fileupload ella te permite subir archivos desde jsp.
salu2
  #3 (permalink)  
Antiguo 20/05/2010, 07:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Subir un fichero con jsp

Se indica dentro del campo action a donde lo mandas, que utilizas un servlet o lo rediriges a una pagina jsp.

Yo te recomendaria que capturaras el formulario con un servlet y alli lo tratarás, y posteriormente mandes una respuesta en forma de jsp, usar directamente una página, no se que posibilidades tendrá. Yo estoy haciendo un proyecto con jsp y todos los formularios los llevo a un servlet

Por cierto method lleva un =.
  #4 (permalink)  
Antiguo 20/05/2010, 12:27
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Cita:
Iniciado por tasshelof Ver Mensaje
Se indica dentro del campo action a donde lo mandas, que utilizas un servlet o lo rediriges a una pagina jsp.

Yo te recomendaria que capturaras el formulario con un servlet y alli lo tratarás, y posteriormente mandes una respuesta en forma de jsp, usar directamente una página, no se que posibilidades tendrá. Yo estoy haciendo un proyecto con jsp y todos los formularios los llevo a un servlet

Por cierto method lleva un =.
Lo del igual fue un fallo técnico de escribir con prisa jeje .
Hombre, no es por no usar servlet, es que yo nunca he hecho un servlet y aunque lo probara, ¿cómo le mandaría la respuesta desde un servlet a un jsp?
  #5 (permalink)  
Antiguo 22/05/2010, 13:09
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Bueno, me había decidido a hacerlo en un servlet usando las librerias commons.fileupload y commons.io. El código es el siguiente:


import org.apache.commons.fileupload.disk.DiskFileItemFac tory;
import org.apache.commons.fileupload.servlet.ServletFileU pload;
import java.util.*;
import org.apache.commons.fileupload.FileItem;
import java.io.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;

response.setContentType("text/html");
PrintWriter out = response.getWriter();

try {

// Inicio de pagina
out.println("&lthtml>");
out.println("&lthead>&lttitle</title></head>");
out.println("&ltbody>");

// Si la request es del tipo multipart/form data ...
if (ServletFileUpload.isMultipartContent(request)){

ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
List fileItemsList = servletFileUpload.parseRequest(request);


DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setSizeThreshold(81920); // bytes

File repositoryPath = new File("/temp");
diskFileItemFactory.setRepository(repositoryPath);

servletFileUpload.setSizeMax(81920); // bytes

Iterator it = fileItemsList.iterator();
while (it.hasNext()){
FileItem fileItem = (FileItem)it.next();

//El formulario solo contien campos input type=file

String nombreCampo = fileItem.getFieldName();
long tamanioArchivo = fileItem.getSize();
String nombreArchivo = fileItem.getName();

String contentType = fileItem.getContentType();

// Obtengo caracteristicas de campo y archivo
out.println( "&ltp&gt--> Name:" + nombreCampo + "</p>");
out.println( "&ltp&gt--> Tamaño archivo:" + tamanioArchivo + "</p>");
out.println( "&ltp&gt--> Nombre archivo del cliente:" + nombreArchivo + "</p>");
out.println( "&ltp&gt--> contentType:" + contentType + "</p>");

// Obtengo extensión del archivo de cliente
String extension = nombreArchivo.substring(nombreArchivo.indexOf(".") );
out.println( "&ltp&gt--> Extensión del archivo:" + extension + "</p>");

// Guardo archivo del cliente en servidor, con un nombre 'fijo' y la
// extensión que manda el cliente
File archivo = new File(directorioArchivos + "/cv" + extension);
fileItem.write(archivo);
if ( archivo.exists() )
out.println( "&ltp&gt--> GUARDADO " + archivo.getAbsolutePath() + "</p>");
else
out.println( "&ltp&gt--> FALLO AL GUARDAR. NO EXISTE " + archivo.getAbsolutePath() + "</p>");

}
}
}
}catch (Exception e) {
e.printStackTrace(out);
e.printStackTrace();
}



Pues resulta que me da error en las lineas en azul y no sé por qué, ¿alguien me puede ayudar, por favor?
  #6 (permalink)  
Antiguo 24/05/2010, 12:02
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Por favor, ¿nadie me puede ayudar? No hago nada más que darle vueltas al código y no veo qué está mal
  #7 (permalink)  
Antiguo 24/05/2010, 22:24
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir un fichero con jsp

Hola que tal, pues allí te dejo una solución a tu problema:

LOS JSP:
index.jsp
Código HTML:
Ver original
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2.    pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Insert title here</title>
  6. </head>
  7. <form action="${pageContext.request.contextPath}/uploadServlet" method="post" enctype="multipart/form-data">
  8.     <input type="file" name="carga"/>
  9.     <input type="submit" name="Subir"/>
  10. </form>
  11. </body>
  12. </html>

salida.jsp
Código HTML:
Ver original
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2.    pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Insert title here</title>
  6. </head>
  7. EL ARCHIVO FUE SUBIDO SATISFACTORIAMENTE AL SERVIDOR.
  8. <a href="index.jsp">Subir otro archivo</a>
  9. </body>
  10. </html>

El descriptor de despliegue donde configuro el servlet:
web.xml
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  3.     <display-name>upload</display-name>
  4.     <servlet>
  5.         <servlet-name>upload</servlet-name>
  6.         <servlet-class>pe.com.slcsccy.upload.UploadServlet</servlet-class>
  7.     </servlet>
  8.     <servlet-mapping>
  9.         <servlet-name>upload</servlet-name>
  10.         <url-pattern>/uploadServlet/*</url-pattern>
  11.     </servlet-mapping>
  12.     <welcome-file-list>
  13.         <welcome-file>index.html</welcome-file>
  14.         <welcome-file>index.htm</welcome-file>
  15.         <welcome-file>index.jsp</welcome-file>
  16.         <welcome-file>default.html</welcome-file>
  17.         <welcome-file>default.htm</welcome-file>
  18.         <welcome-file>default.jsp</welcome-file>
  19.     </welcome-file-list>
  20. </web-app>

Y por ultimo y más importante el servlet que realiza el proceso de recepción del archivo, procesa el archivo, lo guarda en una carpeta en el servidor y redirige el control del programa hacia la página salida.jsp
UploadServlet.java
Código C:
Ver original
  1. package pe.com.slcsccy.upload;
  2.  
  3. import java.io.File;
  4. import java.util.List;
  5.  
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9.  
  10. import org.apache.commons.fileupload.FileItem;
  11. import org.apache.commons.fileupload.FileItemFactory;
  12. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  13. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  14.  
  15. public class UploadServlet extends HttpServlet{
  16.  
  17.     private static final long serialVersionUID = 5597818269713946959L;
  18.    
  19.     @SuppressWarnings("unchecked")
  20.     public void doPost(HttpServletRequest req,HttpServletResponse res){
  21.         try {
  22.             //Proceso de la libreria commons.fileupload para obtener el archivo enviado al servidor
  23.             FileItemFactory factory = new DiskFileItemFactory();
  24.             ServletFileUpload upload = new ServletFileUpload(factory);
  25.             List<FileItem> items = upload.parseRequest(req);
  26.             FileItem item = items.get(0);
  27.            
  28.             //Obtengo datos del archivo enviado
  29.             System.out.println("Nombre del archivo:\t"+item.getName());
  30.             System.out.println("Tamaño del archivo:\t"+item.getSize()/1024+"Kb");
  31.            
  32.             //Copio el archivo en alguna ruta del servidor:
  33.             String nombreArchivo = item.getName();
  34.             nombreArchivo = nombreArchivo.substring(nombreArchivo.lastIndexOf("\\"));
  35.             item.write(new File("C:\\data\\"+nombreArchivo));
  36.            
  37.             //Envio el control del programa hacia la pagina jsp 'salida.jsp'
  38.             req.getRequestDispatcher("/salida.jsp").forward(req, res);
  39.         } catch (Exception e) {
  40.             e.printStackTrace();
  41.         }
  42.     }
  43. }

El proyecto completo en eclipse te lo puedes bajar desde
http://sites.google.com/site/carloscacique/upload.zip?attredirects=0&amp;d=1

Saludos.
Carlos Cacique
http://carloscacique.blogspot.com
  #8 (permalink)  
Antiguo 25/05/2010, 10:39
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Cita:
Iniciado por ccacique Ver Mensaje
Hola que tal, pues allí te dejo una solución a tu problema...
Muchhas gracias, voy enseguida a probarlo. Luego comento los resultados.
  #9 (permalink)  
Antiguo 25/05/2010, 11:19
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Ya lo he probado, pero me da el siguiente error:

Estado HTTP 500 -

--------------------------------------------------------------------------------

type Informe de Excepci�n

mensaje

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

excepci�n

javax.servlet.ServletException: El Arropador (Wrapper) no puede hallar clase de servlet ejemplo.UploadFichero o una clase de la que depende
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:286)
org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:845)
org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.process(Http11Protocol.java:583)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run( JIoEndpoint.java:447)
java.lang.Thread.run(Unknown Source)




Para probarlo, he creado una aplicación llamada "otro" y el servlet "UploadFichero" dentro de una carpeta llamada "ejemplo", he añadido las siguientes líneas en el web.xml:

<servlet>
<description>
</description>
<display-name>
UploadFichero</display-name>
<servlet-name>UploadFichero</servlet-name>
<servlet-class>
ejemplo.UploadFichero</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadFichero</servlet-name>
<url-pattern>/UploadFichero</url-pattern>
</servlet-mapping>

Pero no sé por qué no funciona.
  #10 (permalink)  
Antiguo 25/05/2010, 11:49
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir un fichero con jsp

Haz agregado las librerias del common fileupload y del common io?, bajate el proyecto que te proporciono y busca en WEB-INF/lib/* las librerias *.jar y copialas en tu classpath: WEB-INF/lib

Saludos.
Carlos Cacique
http://carloscacique.blogspot.com
  #11 (permalink)  
Antiguo 25/05/2010, 11:57
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Cita:
Iniciado por ccacique Ver Mensaje
Haz agregado las librerias del common fileupload y del common io?, bajate el proyecto que te proporciono y busca en WEB-INF/lib/* las librerias *.jar y copialas en tu classpath: WEB-INF/lib

Saludos.
Carlos Cacique
http://carloscacique.blogspot.com
Sí he añadido las librerías. También he probado el proyecto upload que me habias indicado y me salía lo mismo, por eso he probado haciendo un nuevo proyecto pero no se soluciona. Yo estoy haciendo la aplcacion con eclipse, por si alguien ha tenido el mismo problema usando servlets y eclipse. ¿Será que tengo que añadir algo más?
  #12 (permalink)  
Antiguo 25/05/2010, 12:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 12
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir un fichero con jsp

Hola, cuales son las versiones del eclipse, del tomcat y del jdk que usas?
  #13 (permalink)  
Antiguo 26/05/2010, 09:00
 
Fecha de Ingreso: abril-2010
Mensajes: 36
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

Cita:
Iniciado por ccacique Ver Mensaje
Hola, cuales son las versiones del eclipse, del tomcat y del jdk que usas?
Pues uso eclipse galileo, tomcat 6 y java 6 (jre6 y jdk1.6.0_20).
  #14 (permalink)  
Antiguo 29/09/2010, 09:57
Avatar de rocka8613  
Fecha de Ingreso: abril-2010
Mensajes: 33
Antigüedad: 14 años
Puntos: 0
Respuesta: Subir un fichero con jsp

hola a todos, yo logre subir ficheros de la siguiente manera pero resulta k tambien tengo otros input cono text, textarea que al momento de recuperar con request.getParameter() me sale null, mi codigo es el siguiente. tengo dos jsp, pagina1.jsp y pagina2.jsp, en la pagina1.jsp lleno el formulario y envio los datos a la pagina2.jsp que se encarga de guardar el archivo pero cuadno kiero recuperar los datos de los demas campos no puedo, los necesito para guardarlos en la BD pordria alguien indicarme como hago tal cosa?

pagina1.jsp:

Código:
<form action=pagina2.jsp method=post enctype=multipart/form-data>
<table>
<tr>
<td>Nombre:</td>
<td><input type=tet name=nombre1></td>
</tr>
<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>
pagina2.jsp:

Código:
<%
File destino=new File("C:\\TEMP\\");
ServletRequestContext src=new ServletRequestContext(request);
if(ServletFileUpload.isMultipartContent(src)){
DiskFileItemFactory factory = new DiskFileItemFactory((1024*1024),destino);
ServletFileUpload upload=new ServletFileUpload(factory);
List lista = upload.parseRequest(src);
File file= null;
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");
}}}%>
  #15 (permalink)  
Antiguo 29/09/2010, 16:38
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir un fichero con jsp

http://www.forosdelweb.com/f45/jsp-s...-combo-666614/

Etiquetas: fichero, jsp, subir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:16.