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

Upload imagenes con struts2

Estas en el tema de Upload imagenes con struts2 en el foro de Java en Foros del Web. Saludos, me gustaría saber si alguien me puede ayudar. Estoy intentando ponerle a mi aplicación la funcionalidad de subir imagenes(tipo png, jpeg y gif) utilizando ...
  #1 (permalink)  
Antiguo 09/08/2011, 02:21
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Upload imagenes con struts2

Saludos, me gustaría saber si alguien me puede ayudar. Estoy intentando ponerle a mi aplicación la funcionalidad de subir imagenes(tipo png, jpeg y gif) utilizando struts 2.2.3 y no soy capaz de conseguirlo.

¿Alguien me puede hechar una mano?? por cierto, estoy siguiendo los tutoriales de roseindia.

Muchas gracias.
  #2 (permalink)  
Antiguo 09/08/2011, 12:36
 
Fecha de Ingreso: marzo-2009
Ubicación: Salamanca, España
Mensajes: 141
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: Upload imagenes con struts2

La carga de archivos en Struts 2 requiere del uso del interceptor fileUpload.

Un muy buen ejemplo lo tienes en Vaanilla:

http://www.vaannila.com/struts-2/str...example-1.html

Otro ejemplo:


http://programacionconejemplos.blogs...ileupload.html

En la documentacion oficial:

http://struts.apache.org/2.0.14/docs/file-upload.html

Un saludo
__________________
Puedes seguirme en Twitter: @fcojose2001
  #3 (permalink)  
Antiguo 10/08/2011, 03:59
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Upload imagenes con struts2

Muhcas gracias por la ayuda, ya tengo funcionando la subida de imagenes. Lo que me gustaría hacer ahora es que la imagen que sube y que la guarda como .temp,

guardarla en una carpeta especifica de mi proyecto con otro nombre. ¿como puedo hacer esto? hay alguna función de struts que se utilice para esto o hay que hacer manualmente un código que trate las cosas que subes???
  #4 (permalink)  
Antiguo 10/08/2011, 05:27
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Upload imagenes con struts2

he cambiado la ruta donde guarda los temporales, mediante

Código:
 <constant name="struts.multipart.saveDir" value="C:/fileUploadTempDir" />
en el archivo struts.xml.

Me podríais decir si struts da alguna utilidad para guardar las imagenes o si tendría que hacerlo yo. En cuyo caso ¿me podeis explicar como conseguirlo?
  #5 (permalink)  
Antiguo 10/08/2011, 12:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Upload imagenes con struts2

¿Para guardarlas dónde?

Si es en un directorio, desde el action le dices en qué directorio quieres que lo guarde, exactamente igual que cualquier otro fichero.

Lo que has configurado es el lugar donde monta el fichero, ya que como su nombre indica el envío se hace por partes. Lo normal es que se haga en un fichero temp (controlado por el servidor), para que cada cierto tiempo se borre, y que se guarde en otro sitio los ficheros que se validan.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 10/08/2011, 12:54
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Upload imagenes con struts2

ok, no lo entendia muy bien. A lo que yo me refiero es que me gustaría configurarle la ruta donde se guardan las imagenes ya completas. Por ejemplo en una carpeta images de mi propio proyecto.

Es que en los ejemplos no entiendo donde suben las imagenes que el usuario a decidido subir al servidor.
  #7 (permalink)  
Antiguo 10/08/2011, 17:57
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Upload imagenes con struts2

Te lo diré de otra forma.

No es normal que se suba un fichero y se almacene directamente, lo habitual es realizar ciertas validaciones, aunque algunas puedas hacerlas mediante las configuraciones de struts.

En el action recoges el objeto File que contiene al fichero, igual que harías con un campo de texto, y lo guardas exactamente igual que guardarías un fichero en una aplicación de escritorio, busca tutoriales.

Lo de mandarlo directamente a un directorio sin pasar por el action, no te lo recomiendo en absoluto.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #8 (permalink)  
Antiguo 11/08/2011, 00:36
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Upload imagenes con struts2

Te paso el código para que le heches un vistazo, aunque es como cualquiera de los ejemplos que me habeis pasado.

struts.xml

Código:
<action name="nuevaplanta" class="com.nebusens.web.NuevaPlanta">

    		<interceptor-ref name="fileUpload">
        		<param name="allowedTypes">image/jpeg,/image/jpg,image/gif,image/png</param>
        		<param name="maximumSize">10485760</param> 
        		<!-- Pongo un límite de 10mb de imagen -->
    		</interceptor-ref> 
    		<interceptor-ref name="defaultStack"></interceptor-ref>
			<result name="success">/jsp/nueva_planta_success.jsp</result>
			<result name="input">/jsp/nueva_planta.jsp</result>
		</action>
NuevaPlanta.java

Código:
public class NuevaPlanta extends ActionSupport {

	private File archivo; //Almacena el archivo
	
	private String archivoContentType; //Tipo de contenido
	
	private String archivoFileName; //Nombre de archivo  cargado
	private String descripcion;


	public String execute() {
		System.out.println("Los datos son: "+getArchivo());
		System.out.println("descripcion:"+getDescripcion());
	
	
	return "success";
	
	}


Con este código me sube la imagen, lo que yo pregunto es si strut ya me la ha guardado en un directorio y simplemente tengo que cambiar ese directorio al que yo deseo. O si tengo que hacer yo el programita.
  #9 (permalink)  
Antiguo 11/08/2011, 01:15
Avatar de atapuerkasman  
Fecha de Ingreso: febrero-2011
Mensajes: 76
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Upload imagenes con struts2

He cambiado el código, me gustaría que las imagenes subidas las guardara en Miproyecto/WebContent/images/planos

Este es el código del archivo NuevaPlanta.java (el action de struts2 )

Código:
private File myfile;
	private String myfileFileName;
	private String myfileContentType;
	private String filePathToSaveInDB;
	
	
	
	
	public String openHome(){
		return "open";
	}
	
	public String execute(){
		
		try{
			ServletContext servletContext = ServletActionContext.getServletContext();
			String path= "/index.html";
			if(path==null)
				System.out.println("Error al especificar la ruta virtual de guardado");
			//aquí va la ruta donde se subiran las imagenes
			String filePath= servletContext.getRealPath(path);
			
			File uploadDir= new File(filePath);
			//si el directorio no existe, lo crea
			if(uploadDir.exists()==false){
				uploadDir.mkdirs();
			}
			setFilePathToSaveInDB(path+"/"+ myfileFileName);
			FileUtils.copyFile(myfile, new File(uploadDir, myfileFileName));
		}catch(Exception e){
			System.out.println("Exception: "+e);
			addActionError(e.getMessage());
			return "error";
		}
		
		return "success";
	}
Me devuelve todo correcto, además las validaciones de tamaño máximo de archivo y de tipo de archivo de struts.xml funcionan perfectamente.

me gustaría saber que valor tengo que introducir en:

Código:
String path= "/index.html";
String filePath= servletContext.getRealPath(path);
Para que las imagenes subidas correctamente se almacenen en la carpeta /images/planos de mi proyecto.

Última edición por atapuerkasman; 11/08/2011 a las 01:36

Etiquetas: imagenes, struts2, upload
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 22:42.