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

Subir archivos y valores de campo de input de formulario

Estas en el tema de Subir archivos y valores de campo de input de formulario en el foro de Java en Foros del Web. Hola que tal, escribo este tema nuevo porque por mas que este tema se trato mas de 1000 veces en este foro no se toco ...
  #1 (permalink)  
Antiguo 24/07/2010, 23:38
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
Subir archivos y valores de campo de input de formulario

Hola que tal, escribo este tema nuevo porque por mas que este tema se trato mas de 1000 veces en este foro no se toco puntualmente lo que yo necesito o por lo menos yo no lo encontre.
Mi problema es el siguiente, tengo una pagina .jsp con un formulario multipart/ data no se cuanto. con dos campos uno de tipo text y otro file. (si ya se que parece que hasta aqui es lo mismo que otros problemas ya planteado pero ahora viene la diferencia), este formulario llama al servlet que utiliza el FileUpload de jackarta para subir el archivo y hasta aca me anda todo bien.
El tema es que quiero que el archivo me lo guarde con un nombre de destino que es el que el usuario ingreso en el text, entonces yo lo que hice es hacer una clace que me devuelva del request un hashmap <nombreCampo,valorCampo> para todos los campos del formulario mediante esta misma libreria FileUpload y mediante item.getFieldName() y item.getString(), de este hashmap saco por el nombre del campo nombre el nombre que ingreso el usuario en el input text para luego si poder procesar nuevamente el request para que me suba el archivo y lo guarde, pero cuando quiero procesar por segunda vez el request no me sube la imagen porque es como que quedo sin elementos de formulario (como si el primer procesamiento del request lo hubiese borrado los campos que recibio el request).
esto como lo soluciuono? se puede hacer una copia al httpservletrequest para pasar unicamente la copia y asi me quede para procesarlo en la segunda vez para que suba el archivo???
espero que me haya explicado bien.
  #2 (permalink)  
Antiguo 25/07/2010, 13:10
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir archivos y valores de campo de input de formulario

En lugar de guardar esa información en la request, hazlo en la session, o si no utiliza forward para mantener la request, de lo contrario lo que hace es crear una nueva request, de ahí que se te pierdan los datos.


http://www.jtech.ua.es/j2ee/ejemplos...01-apuntes.htm
  #3 (permalink)  
Antiguo 25/07/2010, 15:13
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir archivos y valores de campo de input de formulario

Antes que nadas muchisimas gracias por contestar...
No se a que te referis con guardarlos en session porque lo tengo en el request porque me lo manda el formulario y es la unica forma de recuperar el dato de lso campo del formulario (que esta en el jsp).
  #4 (permalink)  
Antiguo 25/07/2010, 15:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir archivos y valores de campo de input de formulario

En el enlace que te puse

Cita:
el objeto HttpSession asociado con la petición actual. En JSP, las sesiones se crean automáticamente, de modo que este objeto está instanciado aunque no se cree explícitamente una sesión.
Los servlet crean varios objetos, uno de ellos, la session, se mantiene para un usuario durante X tiempo tras acceder a una jsp, y es compartido por las distintas request que vaya generando el usuario, de ahí que se utilice para guardar datos utilizados por distintas request. Tiene un Map de atributos donde almacenar lo que te interese, igual que la request, así que puedes pasar (mediante código) los atributos/parametros de la request que quieras conservar, a los atributos de la session..

La otra opción es usar un forward, ya que traspasa una misma request entre dos jsp.

Cita:
La acción <jsp:forward> sirve para redirigir la petición a otra página JSP
  #5 (permalink)  
Antiguo 25/07/2010, 15:55
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir archivos y valores de campo de input de formulario

Haaa ok! ahora si entiendo lo que vos decis... ahora lo pruebo.
  #6 (permalink)  
Antiguo 25/07/2010, 16:11
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir archivos y valores de campo de input de formulario

Por si se me entendió mal, la session se crea cuando un usuario accede por primera vez a una jsp de nuestro proyecto, y la misma session será accesible desde las distintas jsp que el usuario vaya visitando. Se borrará tras un tiempo definido por el servlet (configurable)

Pero si sólo vas a mantener la información entre dos jsp, quizás sea mejor que uses el forward. LLega con añadir una etiqueta en el jsp origen
  #7 (permalink)  
Antiguo 25/07/2010, 20:12
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir archivos y valores de campo de input de formulario

Hola, si entendi como es la session, de hecho la uso para guardar datos del logeo y otros tipos de datos. como dato adicional uso jsp y jstl y para que el usuario no tenga que rellenar nuevamente los datos del formulario cuando hace el submit lo proceso en un servlet y si tiene errores, guardo el valor de todos los campos en session y realizo un requestDispatcher.forward, y en el jsp lo leo con el jstl el valor del campo (todo esto usa session).
ahora lo que no se si me entendio bien, es que el problema que tengo es cuando utilizo el FileUpload para subir el archivo, cuando realizo el upload.parseRequest( request ); para que me devuelva todos los campos de type="files", si mas tarde quiero realizar lo mismo para recuperar todo los campos que son de type="text" (en otra parte del servlet no me devuelve ningun campo, debugeando me di cuenta que despues del primer upload.parseRequest( request ); (osea cuando buso los campos type="file") me blanquea el request, por eso en el segundo no se encuentra ningun campo tipo text.
pero esto lo solucione creando una clase intermedia, a esta le cree un metodo al que le paso el request y me guarda en dos atributos (campos e imagens) de tipo map, con lo cual proceso una sola vez el request y me completa dichos atributos con los campos de tipo text y en el atributo imagen me completa el map con los campos de tipo file y los atributos tienen sus geter y seter, por lo cual en el servlet obtengo el valor ingresado y luego proceso el campo file para subir el archivo.
por lo menos ahora anda, no se si sera la forma correcta de hacerlo asi, pero anda.
avisame si es eso lo que entendiste del problema, ya que me desoriento lo que me decis que con el forward lo puedo solucionar, pero concretamente mi problema no es pasar datos de una pagina a otra, es que se me blanqueaba el request.
  #8 (permalink)  
Antiguo 26/07/2010, 15:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir archivos y valores de campo de input de formulario

No te había entendido bien, por lo que parece el problema que tienes es que al hacer la parseRequest desaparece el contenido de la request, por lo que usar un forward no te serviría ya que la request ya estaría vacía.

La verdad es que no domino el tema ya que siempre he utilizado Struts, pero leyendo este enlace

http://commons.apache.org/fileupload/using.html

parece que si el archivo es grande, no se mantiene en memoria, se guarda como un fichero temporal

Cita:
* Uploaded items should be retained in memory as long as they are reasonably small.
* Larger items should be written to a temporary file on disk.
* Very large upload requests should not be permitted.
* The built-in defaults for the maximum size of an item to be retained in memory, the maximum permitted size of an upload request, and the location of temporary files are acceptable.
De todas formas, por lo que pone, al hacer el parseRequest te devuelve una lista con los objetos (campos de formulario y ficheros), que creo que es la que deberías utilizar ya que te permite manejar de forma cómoda campos y ficheros, sin tener que utilizar una clase intermedia, trasladando sólo esta List.

Cita:
// Process a file upload
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
...
}
Incluso parece que hay un método isInMemory() que te permite saber si está en memoria o ha sido guardado como archivo temporal. De esa forma podrías confirmar que te desaparece.

Según pone en la API, deberías utilizar ServletFileUpload en vez del FileUpload

http://commons.apache.org/fileupload...vletRequest%29

Cita:
Deprecated. Use the method in ServletFileUpload instead.
  #9 (permalink)  
Antiguo 26/07/2010, 20:28
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Subir archivos y valores de campo de input de formulario

sisi, es correcto lo que decis, y estoy utilizando el ServletFileUpload pero en la pregunta ponia FileUpload (error mio).
respecto a si se mantiene en memoria la imagen, no me interesa, porque con la clase intermedia recupero los campos y el valor que ingreso el usuario, y despues con la misma clase intermedia recupero el file que me interesa y lo grabo en disco directamente con el nombre que ingreso el usuario (la direccion la tengo en un parametro en el web.xml)
respecto a Struts, tienes algun link donde explique desde cero porque la verdad es que esos tipo de frameworks nunca los entendi bien y no entiendo como usarlo tampoco , pero se que son muy buenos y se te agiliza muchisimo la programacion.
nuevamente muchisimas gracias por tu gran ayuda!!! tus respuestas me fueron muy utiles.
  #10 (permalink)  
Antiguo 27/07/2010, 16:56
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Subir archivos y valores de campo de input de formulario

Yo estoy aprendiendo con el libro "Struts 2" de Anaya Multimedia y tirando de la documentación de la web. Si tienes algunos conocimientos de servlets no te será difícil, y si no tampoco es complicado aprender lo suficiente para que compense.

Si quieres puedes echarle un vistazo a los archivos de ejemplo que trae el libro

http://www.anayamultimedia.es/cgi-bi...omplementos.pl
Código comercial: 2327704
  #11 (permalink)  
Antiguo 27/07/2010, 20:48
 
Fecha de Ingreso: agosto-2009
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Subir archivos y valores de campo de input de formulario

Muchisimas gracias! sos un groso!

Etiquetas: input, subir, formulario, campos
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 12:03.