Prefacio
Al desarrollar aplicaciones web, debemos proporcionar a los usuarios las funciones de carga, como cargar una imagen como avatar. Para cargar archivos, debemos establecer el método del formulario para publicar y el enchype a multipart/form-data . Solo en este caso el navegador enviará los datos binarios del archivo seleccionado del usuario al servidor. Este artículo proporcionará un resumen detallado de la función de carga en el marco Struts2. No diré mucho a continuación, echemos un vistazo a la introducción detallada juntos.
Struts2 Archivo Subida
STRUTS2 no proporciona su propio analizador de solicitud, es decir, Struts2 no manejará las solicitudes de datos multipartes/de formulario por sí solo. Necesita llamar a otros marcos de carga para analizar los datos de solicitud binarias, pero Struts2 encapsula aún más el analizador de carga original, simplificando aún más la carga de archivos.
En el archivo de configuración default.properties de STRUTS2, puede ver el código de configuración como este:
### analizador para manejar las solicitudes de publicación HTTP, codificadas utilizando el tipo mime de mimeT/formy-data# struts.multipart.parser = cos# struts.multipart.parser = pell# struts.multipart.parser = jakarta-streamamtruts.multipart.parser = jakarta# usos javax.servlet.servlet. DefaultTruts.multipart.savedir = struts.multipart.maxsize = 2097152
El código anterior se usa principalmente para configurar el analizador de carga al cargar archivos en Struts2. La encapsulación de Struts2 aísla la diferencia entre los componentes de carga de archivo subyacentes. Mientras el resolución se use para cargar este archivo de configuración, los desarrolladores pueden cambiar fácilmente entre diferentes marcos de carga de archivos.
Struts2 usa el analizador de carga de Yakarta de forma predeterminada, por supuesto, si no le gusta, también puede cambiar a otra cosa. La siguiente es una función de carga de archivo simple basada en Struts2 a través del código.
Implementar la acción de la carga de archivos
Página de recepción:
<form de acción = "upload" método = "post" enctype = "multipart/form-data"> title: <input type = "text" name = "title"> <br> file: <input type = "file" name = "upload"> <br> <input type = "enviar" value = "enviar"> </form>
Clase de acción:
Public Class UploadAction extiende ActionSupport {Título de cadena privada; carga de archivo privado; String private SubloadContentType; String privado cargandofileName; String String SavePath; public void setSavePath (valor de cadena) {this.savePath = valor; } String private getSavePath () {String realPath = servletactionContext.getServletContext (). GetRealPath ("/Web-Inf/" + SavePath); regresar realpath; } public void settitle (valor de cadena) {this.title = valor; } public String gettitle () {Título de retorno; } public void setUpload (valor de archivo) {this.upload = valor; } archivo público getupload () {return upload; } public void setUploadContentType (valor de cadena) {this.uploadContentType = valor; } public String getFileContentType () {return uploadContentType; } public void setUploadFileName (valor de cadena) {this.uploadFileName = value; } public String getuploadFileName () {return uploadFileName; } @Override public String Execute () lanza la excepción {FileOutputStream fos = new FileOutputStream (getSavePath () + "//" + getuploadFileName ()); FileInputStream fis = new FileInputStream (getUpload ()); byte [] buffer = new Byte [1024]; int len = 0; while ((len = fis.read (buffer))> 0) {fos.write (buffer, 0, len); } fis.close (); fos.close (); devolver el éxito; }}Struts.xml Archivo de configuración:
<paquete name = "upload" extends = "Struts-Default"> <Action name = "upload"> <param name = "savePath">/upload </amam> <resultado name = "éxito">/éxito.jsp </resultado> <resultado name = "input">/index.jsp </resultado> </action> </paquete>
Para la clase de acción, se incluyen dos propiedades especiales:
Estos dos atributos se utilizan para encapsular el nombre del archivo del archivo cargado y el tipo de archivo del archivo cargado. Para Struts2, si el formulario de formulario contiene un campo de archivo con el atributo de nombre XXX, la acción correspondiente debe usar tres atributos para encapsular la información del campo de archivo:
A través del proceso de desarrollo anterior, podemos ver que de hecho es algo simple cargar archivos a través de Struts2. Lo que debemos hacer es asociar el dominio del archivo con una propiedad de tipo de archivo en acción, para que podamos acceder fácilmente al contenido del archivo del archivo cargado. En cuanto a cómo Struts2 usa el analizador multipart, es completamente transparente para los desarrolladores.
Implementar manualmente el filtrado de archivos
Muchas veces, las aplicaciones web no permiten a los usuarios subir libremente. Necesitamos limitar el tipo de archivo y el tamaño del archivo cargado por los usuarios, por lo que el filtrado de archivos debe realizarse durante la carga del archivo. Ahora, implementaremos manualmente el filtrado de archivos de carga.
Configure un nuevo parámetro en Struts.xml para indicar el tipo de carga compatible:
<Param name = "IloodTypes"> Image/Png, Image/Gif, Image/JPeg </ PARAM>
Agregue una función de validación en acción:
// Verify @OverridePublic Void Validate () {String filtreResult = filtreType (getAlowTypeS (). Split (",")); if (filtreResult! = null) {addfielderror ("cargar", "el tipo de archivo que desea cargar es incorrecto!"); }} public String FilterType (String [] tipos) {String fileType = getFileContentType (); for (type de cadena: tipos) {if (type.equals (fileType)) {return null; }} error de retorno;} Esto solo implementa el juicio de tipo y luego implementa la verificación de tamaño basada en length() de la clase de archivo. Pero es tan problemático, hablemos de una declaración más simple.
Interceptor implementa el filtrado de archivos
Struts2 proporciona un interceptor para la carga de archivos, y el filtrado de archivos se puede lograr más fácilmente mediante la configuración de un interceptor. FileUpload de la carga de archivos en Struts2. Para que el interceptor funcione, solo necesita configurar la referencia del interceptor en la acción.
Al configurar un Interceptor FileUpload, puede especificar dos parámetros para él:
<!-Configurar FileUpload Interceptor-> <Interceptor-Ref name = "fileUpload"> <param name = "permitidoTypes"> Image/png, image/gif, image/jpeg </param> <param name = "maximumumsize"> 20000000 </param> </interceptor-ref> <!-Configure el intersceptor predeterminado del sistema-> <interceptor-rehack " /> <resultado name = "éxito">/éxito.jsp </resultado>
De esta manera, la modificación de la configuración se puede hacer, lo que es realmente mucho más fácil que escribir un código.
Mensaje de error de configuración
Para obtener errores de carga, el sistema solicitará mensajes de error en inglés de forma predeterminada. Sin embargo, para emitir mensajes de solicitud internacionales, es necesario agregar las siguientes dos definiciones clave de mensajes al archivo de configuración de recursos internacionales:
struts.messages.error.content.type.not.allowed . allowed = el tipo de archivo de carga es incorrecto, por favor suba de nuevostruts.messages.error.file.too.large = El archivo que cargó es demasiado grande, por favor suba de nuevoA continuación, puede usar <S: Fielderror/> para emitir el mensaje de error.
Configuración constante para la carga de archivos
Al comienzo del artículo, hablamos sobre la configuración en default.properties , que tiene un struts.multipart.saveDir configuración. Entonces, ¿cuál es la función específica de este elemento de configuración?
Durante el proceso de carga de archivos STRUTS2, se debe especificar una carpeta temporal para almacenar archivos temporales generados durante el proceso de carga; Si no se especifica una carpeta temporal, el sistema vale la pena usar javax.servlet.context.tempdir , debajo del trabajo/catalina/localhost/ruta debajo de la ruta de instalación de Tomcat. Y esto struts.multipart.Savedir configura la ubicación de almacenamiento de archivos temporales. Por lo tanto, durante el proceso de desarrollo, debe prestar atención a si el directorio tiene permisos de lectura y escritura.
También hay una configuración struts.multipart.maxSize , que representa el tamaño del archivo cargado. Si la propiedad de tamaño máximo de esta configuración y la propiedad de tamaño máximo del interceptor de Upload se especifican al mismo tiempo, primero se comparará con la propiedad máxima de tamaño struts.multipart.maxSize Configuration, y luego se comparará con la propiedad máxima de la propiedad de archivo de archivo. Si el tamaño del archivo excede la configuración máxima de struts.multipart.maxSize , aparecerá una excepción y el resultado no se transferirá a la entrada. Asegúrese de prestar atención a esto.
Resumir
Este artículo resume la carga de archivos en Struts2 en detalle. Hay muchos contenidos, básicamente todos los contenidos en el manual. Bueno, solo úsalo como manual.
De acuerdo, lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.