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

Insertar imagenes en formulario

Estas en el tema de Insertar imagenes en formulario en el foro de Java en Foros del Web. Hola!! Tengo un formulario de registro en el que el usuario al registrarse puede agregar una imagen para identificarlo(es opcional). He leido sobre si es ...
  #1 (permalink)  
Antiguo 19/03/2014, 16:53
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Insertar imagenes en formulario

Hola!!

Tengo un formulario de registro en el que el usuario al registrarse puede agregar una imagen para identificarlo(es opcional). He leido sobre si es más conveniente guardar la imagen en el servidor o en la base de datos, y quiero guardarla en el servidor ya que es mas eficiente.

Mi problema es como obtener la imagen en mi servlet y posteriormente subirla al servidor, y como hacer para mostrar la imagen al usuario una vez q ha elegido la foto que desea subir.

A ver si alguien me echa un cable.

Un saludo !!
  #2 (permalink)  
Antiguo 20/03/2014, 01:29
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Hola,

para subir imágenes a un servidor, tienes un ejemplo que funciona muy bien en la wiki de chuidiang (este hombre tiene respuesta para todo jajajja ) utilizando la libreria apache-commons-fileupload,

http://chuwiki.chuidiang.org/index.p...upload_con_JSP

Yo la he utilizado y me ha funcionado correctamente.

Cualquier duda, aqui estamos.

Un saludo.
  #3 (permalink)  
Antiguo 24/03/2014, 13:24
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Hola:

Gracias por tu respuesta. Siento contestar tan tarde pero estuve fuera el fin de semana. Te comento como tengo estructurado el paso de datos entre jsp y servlet.

En mi pagina jsp tengo un formulario de registro en el cual tengo un campo para subir la imagen, paso los datos al servlet a través de un form-bean, una vez en el servlet recojo los datos del formulario. He visto lo que me pusiste aquí, pero en el ejemplo no utiliza form-beans y e probado y no me sale.

Mi duda es como recoger la imagen en el form-bean y que ruta debería poner para guardar la imagen en el servidor, y una vez guardada en el servidor como visualizarla en mi página jsp.

Gracias por tu tiempo !!
Un saludo !!
  #4 (permalink)  
Antiguo 24/03/2014, 16:48
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Cita:
Iniciado por trabugata Ver Mensaje
Hola:

Gracias por tu respuesta. Siento contestar tan tarde pero estuve fuera el fin de semana. Te comento como tengo estructurado el paso de datos entre jsp y servlet.

En mi pagina jsp tengo un formulario de registro en el cual tengo un campo para subir la imagen, paso los datos al servlet a través de un form-bean, una vez en el servlet recojo los datos del formulario. He visto lo que me pusiste aquí, pero en el ejemplo no utiliza form-beans y e probado y no me sale.

Mi duda es como recoger la imagen en el form-bean y que ruta debería poner para guardar la imagen en el servidor, y una vez guardada en el servidor como visualizarla en mi página jsp.

Gracias por tu tiempo !!
Un saludo !!
Hola, sino es mucha molestia, pon el código del formulario y del servlet para ver que es lo que tienes hecho y como estás trabajando.
Que estas trabajando con Struts?
  #5 (permalink)  
Antiguo 25/03/2014, 16:01
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Hola:

La foto ya la subo al servidor, ahora mis dudas son:

- Como obtener la imagen del servidor para mostrarla en mi pagina jsp.

- Que ruta debería poner para que, en un futuro, cuando suba mi aplicación a un servidor, la imagen se guarde en un directorio del servidor, la ruta que tengo ahora está dirigida a una carpeta de mi servidor local.

La ruta de la imagen la tengo que guardar en la base de datos no??

Pongo aquí el código que tengo:

Clase Action
---------------

FormFile file = userProfileForm.getTheFile();
String tipoContenido = file.getContentType();
String nombreArchivo = file.getFileName();
int size = file.getFileSize();

File ficheroNuevo = new File("C:\\Servidor\\Apache Tomcat 7.0.37\\apache-tomcat-7.0.37\\webapps\\clubpadel\\perfil",nombreArchivo) ;

FileOutputStream fileOutStream = new FileOutputStream(ficheroNuevo);
fileOutStream.write(file.getFileData());
fileOutStream.flush();
fileOutStream.close();

Clase ActionForm
---------------------

private FormFile theFile;


public FormFile getTheFile(){
return theFile;
}
public void setTheFile(FormFile theFile){
this.theFile=theFile;
}

Y bueno el html queda claro, simplemente el input de tipo file y con enctype="multipart/form-data".

Al registrarse un usuario la imagen se me coloca en la raíz que yo le indico, pues bien, ahora quiero que cuando por ejemplo el usuario vaya a su perfile se muestre la imagen que ha subido en el registro.

Un saludo compi !!
  #6 (permalink)  
Antiguo 25/03/2014, 16:45
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Veo que trabajas con Struts.

Una posibilidad sería crear una carpeta dentro del path de tu aplicación, y acceder a esa ruta de manera relativa, evitando así las rutas absolutas.
Y por lo tanto debes almacenar en BBDD la ruta relativa de la imagen para cada usuario, agregando una propiedad "rutaImagenPerfil" por ejemplo, en el objeto base de tipo Usuario (que supongo que así lo tendrás implementado).

Para obtener el path de una carpeta que se encuentra dentro de la aplicación puedes probar así:

Código Java:
Ver original
  1. File ruta= new File(request.getServletContext().getRealPath("nombreCarpetaImagenes/perfiles"));

Prueba y comentas.
Un saludo.
  #7 (permalink)  
Antiguo 25/03/2014, 18:53
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Hola:

Justo después de escribirte seguí buscando y lo hice como me acabas de poner. Ahora lo que hago en mi clase Action es esto:

FormFile file = userProfileForm.getTheFile();

String tipoContenido = file.getContentType();
String nombreArchivo = file.getFileName();
int size = file.getFileSize();


String path = request.getSession().getServletContext().getRealPa th("/");
String filePath = path.concat("imgusers/");
File ficheroNuevo = new File(filePath,nombreArchivo);
FileOutputStream fileOutStream = new FileOutputStream(ficheroNuevo);
fileOutStream.write(file.getFileData());
fileOutStream.flush();
fileOutStream.close();


Obtengo la ruta absoluta y lo que guardo en la base de datos es la carpeta de destino y el nombre del archivo. Esto funciona correctamente.

Mi siguiente paso es cuando el usuario le da a Mi Perfil, que sentencias debo utilizar para recuperar esa imagen del servidor.
Creo que debo obtener de nuevo la ruta absoluta y añadirle la ruta que guardo en la Base de Datos. Y luego seguramente crear un File, pero después no se como hacer para cargar ahi la imagen y pasarla al jsp y una vez en el jsp poder visualizarla. No se si me he explicado bien.

Y SI trabajo con Struts, se me olvido decirtelo antes.

Un saludo !!
  #8 (permalink)  
Antiguo 26/03/2014, 01:34
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Cuando el usuario le da a mi perfil, accedes al Action correspondiente, y desde ahí llamas a las clases pertinentes para obtener un objeto de tipo Usuario, este objeto lo almacenaras en el request y redireccionarás hacia la JSP correspondiente, lo haces así no?

Como te mencione más arriba, en ese objeto Usuario ya tienes que tener una propiedad, "rutaImagenPerfil" que tenga almacenada la ruta relativa, luego desde la JSP simplemente haciendo:

Código HTML:
Ver original
  1. <img src="/rutaBBDD/imagen.jpg">

obteniendo la ruta desde el objeto usuario claro, debería funcionar, ¿has probado?

Por otro lado, cuando dices que el usuario accede a su perfil, es porque existe un usuario logueado, podrías guardar el objeto Usuario en sesión una vez que se loguea con todas sus propiedades, y por lo tanto cuando accedes al perfil ya tendrías la información en sesión, evitando volver a llamar a la BBDD.

Un saludo.
  #9 (permalink)  
Antiguo 26/03/2014, 10:45
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Hola !!

Ya lo tengo solucionado, pero sigo teniendo una pequeña duda, te comento.

En el action correspondiente cuando el usuario le da a Mi Perfil, lo que hago es obtener un objeto de tipo usuario en la base de datos y ahi tengo la ruta relativa de mi imagen que es="imagenes/imagen.jpg".
Primeramente lo que hice fue hacer de nuevo:
String path = request.getSession().getServletContext().getRealPa th("/");
y concatenarlo con la ruta obtenida en la base de datos. Luego pasaba la ruta mediante:request.setAttribute("rutaImagen", rutaImagen);

En la pagina JSP lo que hago es:
<img src="<%= request.getAttribute("rutaImagen")%> pero así no me sale la fotografía.

He probado poniendo:
<img src="http://localhost:8080/clubpadel/imagenes/imagen.jpg"/> y así si visualizo la imagen.

Y aquí viene mi duda, ahora en mi servidor local me funciona perfectamente pero cuando mi aplicación la suba a un servidor, como obtengo la direccion del servidor, está claro que localhost:8080 no sería. El resto de la ruta no tendría problema porque lo tengo en mi BD guardado.

Respecto a lo de guardar el objeto usario en la sesión tienes razón, porque me ahorro accesos a la base de datos, cuando solucione lo de la imagen me pongo a ello.

Un saludo !!
  #10 (permalink)  
Antiguo 26/03/2014, 10:52
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Acabo de probar poniendo:

<img src="/clubpadel/imagenes/imagen.jpg"/>

Es decir, sin lo de localhost, pues así debería funcionar en cualquier servidor y desde cualquier ordenador, es cierto??

Saludos !!!
  #11 (permalink)  
Antiguo 27/03/2014, 00:47
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Donde tienes situada la carpeta Imagenes?? poniendola dentro de la carpeta WebContent, deberia mostrar la imagen, sin agregar el path.
  #12 (permalink)  
Antiguo 01/04/2014, 11:27
 
Fecha de Ingreso: febrero-2014
Mensajes: 16
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Insertar imagenes en formulario

Hola:

Llevaba días sin pasarme por aqui.

El proyecto lo tengo dentro de eclipse y dentro del servidor tomcat para ir probando como va quedando. Las imagenes se guardan en diferentes sitios, creo que es porque eclipse genera una ruta diferente, pero lo que me importa es como se guardan dentro del servidor tomcat.

En el servidor la ruta del directorio es asi:

C:\Servidor\Apache Tomcat 7.0.37\apache-tomcat-7.0.37\webapps\clubpadel

Y dentro de clubpadel que es mi proyecto tengo la carpeta de imagenes, es decir dentro del webcontent.

Ya tengo todo correcto, me sube y borra fotos del servidor cuando quiero, espero que cuando lo suba a un servidor esto no me de problemas.

Un saludo !!
  #13 (permalink)  
Antiguo 01/04/2014, 11:36
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 4 meses
Puntos: 22
Respuesta: Insertar imagenes en formulario

Hola,

si trabajas con rutas absolutas así

C:\Servidor\Apache Tomcat 7.0.37\apache-tomcat-7.0.37\webapps\clubpadel

te dará problemas , porque cuando lo subas a un servidor, la ruta no existirá, lo que tienes que hacer es trabajar con rutas relativas.

Si estas trabajando con lo que mencionamos en post anteriores

Código Java:
Ver original
  1. request.getSession().getServletContext().getRealPath("/");

No deberías tener problemas.

Me alegro de que te funcione.
Un saludo.

Etiquetas: jsp
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 10:51.