12 de Diciembre de 2005 (admin) Se realiza con un Struct normal, pero con ciertas características que deberá tener el formulario (Página jsp), el ActionForm y el Action. Veamos un ejemplo básico (en cursiva lo importate): El archivo.jsp (formulario) <%@ page language="java" %> <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html:html> <head> <title>Nueva Instalacion Deportiva</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <META name="GENERATOR" content="IBM WebSphere Studio"> </head> <body> <p class="Titulo" align="center">Subir/Cambiar </p> <CENTER> <TABLE class="CampoFormulario" width="450" height="304" border="0" cellpadding="4" cellspacing="4"> <html:form enctype="multipart/form-data" action="/UploadFotoPath"> <tr valign="top"><td height="4"> <FONT color="#FF0000"><html:errors/></FONT></td></tr> <tr valign="top"><td align="center" height="4"> <table width="60%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr class="CampoFormulario"> <td><div align="center">Imagen </div></td> <td><div align="center"> <html:file property="theFile" /> </div></td> </tr> <tr class="CampoFormulario" align="center"> <td colspan="2"> <html:submit value="Subir"/> </td> </tr> </table> </td></tr> </html:form> </TABLE> </CENTER> <p> </p> </body> </html:html>
El UploadForm.java (ActionForm) package com.ti.rid.web.instalacionDeportiva.Struts; import org.apache.struts.upload.FormFile; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UploadFotoForm extends ActionForm { /** * El archivo que el usuario quiere subir */ protected FormFile theFile; /** * El identificador de la instalación deportiva */ protected String ID_INSTALACION; /** * Recupera la representacion del fichero que el usuario sube */ public FormFile getTheFile() { return theFile; } /** * Introduce la representacion del fichero que el usuario sube */ public void setTheFile(FormFile theFile) { this .theFile = theFile; } /** * Recupera el identificador de la instalacion */ public String getId_instalacion() { return ID_INSTALACION; } /** * Introduce el identificador de la instalación */ public void setId_instalacion(String aString) { this .ID_INSTALACION = aString; } /* * Comprueba que el archivo cumple los parámetros que pedimos de tamaño y extensión */ public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); //Controlamos el tamaño del archivo if (!((theFile.getFileSize() != 0) && (theFile.getFileSize() < utils.constantes.ConstantesRID.MAX_SIZE))) { errors.add( "error.tamanio" , new ActionError( "error.tamanio" )); } //Recuperamos el tipo de archivo if (!theFile.getContentType().equalsIgnoreCase(utils.constantes.ConstantesRID.FILE_TYPE)) { errors.add( "error.email" , new ActionError( "error.email" )); } return errors; } //validate } //class UploadFotoForm El UploadAction.java (Action) package com.ti.rid.web.instalacionDeportiva.Struts; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.io.FileOutputStream; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.File; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.upload.FormFile; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ForwardingActionForward; //import com.ti.rid.types.*; import com.ti.rid.proc.*; public class UploadFotoAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { if (form instanceof UploadFotoForm) { UploadFotoForm theForm = (UploadFotoForm) form; String fileNewName = theForm.getId_instalacion()+ ".jpg" ; //El nombre con el que queremos guardar el archivo FormFile file = theForm.getTheFile(); //Recuperamos la representación del archivo //ubicación y nombre del archivo a guardar String path = utils.constantes.ConstantesRID.FILE_PATH+fileNewName; //Controlamos las condiciones para subirlo try { // se comprueba que la ruta exista File f = new File(path); if (makeSureDirectoryExists(parent(f))) { // Se graba en la ruta la foto; FileOutputStream out = new FileOutputStream(f); out.write(file.getFileData()); out.flush(); out.close(); //indicamos que la intalación tiene ya foto asociada PInstalacionesDeportivas myPIDeportivas = new PInstalacionesDeportivas(); myPIDeportivas.setFoto( new Integer(theForm.getId_instalacion()), true ); } //if } //try catch (Exception ex) { System.out.println ( "Lanzada excepcion en UploadFotoAction:" +ex); return null ; } //Destruimos el archivo temporal file.destroy(); System.out.print( "Subido el archivo deportiva" ); //Retornamos y continuamos en return mapping.findForward( "alta_ok" ); } //if //Nunca sucederá en este ejemplo return null ; } //perform /** * Devuelve la ruta padre del subdirectorio actual * @param File --> El archivo del cual se quiere sacar su directorio o directorio padre * @return File --> Crea un archivo con la ruta del directorio padre */ private File parent(File f) { String dirname = f.getParent(); if (dirname == null ) { return new File(File.separator); } return new File(dirname); } /** * Crear un subdirectorio si este no existe * @param dir --> El path del archivo (dirección + nombre) * @return True -> Existe o se ha creado False --> No existe y no se ha podido crear */ private boolean makeSureDirectoryExists(File dir) { if (!dir.exists()) { if (makeSureDirectoryExists(parent(dir))) dir.mkdir(); else return false ; } return true ; } } /** * Devuelve la ruta padre del subdirectorio actual * @param File --> El archivo del cual se quiere sacar su directorio o directorio padre * @return File --> Crea un archivo con la ruta del directorio padre */ private File parent(File f) { String dirname = f.getParent(); if (dirname == null ) { return new File(File.separator); } return new File(dirname); } /** * Crear un subdirectorio si este no existe * @param dir --> El path del archivo (dirección + nombre) * @return True -> Existe o se ha creado False --> No existe y no se ha podido crear */ private boolean makeSureDirectoryExists(File dir) { if (!dir.exists()) { if (makeSureDirectoryExists(parent(dir))) dir.mkdir(); else return false ; } return true ; } } |