Este artículo comparte el código de implementación específico para cargar y descargar archivos STRUTS2 para su referencia. El contenido específico es el siguiente
1. Subida de archivo
Cargar el componente del archivo enviado por Struts,
recepción:
1) Publicación del método de envío
2) Tipo de forma multipart/formulario de datos
3) Tipo de entrada = archivo
Entre bastidores:
Componente FileUpload proporcionado por Apache
Categoría central:
Factory de FileItemFactory FileItem
ServletFileUpload Core Clase para la carga de archivos en Servlet
FileItem encapsula la información de los elementos de archivo de formulario cargado. En resumen, la carga de archivo es más problemática de procesar.
El interceptor de carga de archivo de archivo de Struts nos ayuda a la función de carga de archivos tardío
<Interceptor name = "fileUpload"/>
cargar.xml
<truts> <paquete name = "upload_" extends = "struts-default"> <!-nota: la palabra clave "fileUpload" no se puede usar con la palabra clave "fileUpload"-> <Action name = "fileUploadaction"> <!-restringir los tipos de archivos cargados-> <Interceptor-ref name = "defaultack"> <<!-restriction the extension de la extensión de los archivos--->> <1TRES name = "fileUpload.AllowExtensions"> txt, jpg, jar </param> <!-restringir los tipos de archivos que se ejecutan [utilizados al mismo tiempo anteriores, obtener intersección] <param name = "fileupload.lowedTypes"> text/sencillo </param>-> </interceptor-ref> <resulte name = "exitoso">/e/exitoso. <resultado name = "input">/e/error.jsp </resultado> </solcion> </paquete> </truts>
cargar.jsp
<Body> <Form Action = "$ {PageContext.Request.ContextPath}/FileUploadaction" Method = "Post" enctype = "multipart/formy-data"> username: <input type = "text" name = "username"> <br/> file: <input type = "file" name = "file1"> <Br/> <br/<input type = "subsit" value "valor" up " </body>error.jsp
<Body> Error.jsp <br/> <!-Vea todos los mensajes de error generados por el marco de Struts durante el tiempo de ejecución-> < %@ taglib uri = "/struts-tags" prefix = "s" %> <s: filderror> </s: fielderror> </body> still.jsp <body> stit.jsp </body>
Código central
FileUpload .class
Public Class FileUpload extiende ActionSupport {// Formulario correspondiente: <input type = "file" name = "file1"> file de archivo privado1; // Nombre de archivo Stred String File1FileName; // Tipo de archivo (MIME) Private String File1ContentType; public void setFile1 (archivo file1) {this.file1 = file1; } public void setFile1FileName (string file1FileName) {this.file1FileName = file1FileName; } public void setFile1ContentType (string file1ContentType) {this.file1ContentType = file1ContentType; } @Override public String Execute () lanza Exception {/********* obtener el archivo cargado y procesarlo *********** // cargue el archivo en el directorio de carga // Obtener la ruta de directorio cargada string ruta = servletactionContext.getServletContext (). GetReAlpath ("/carga"); // crea el archivo de objeto de archivo de destino destfile = nuevo archivo (ruta, file1fileName); // Copiar el archivo cargado en el destino FileUtil.CopyFile (File1, DestFile); devolver el éxito; }} Detalles de procesamiento de carga de archivos
a. Límite de tamaño de archivo
La carga máxima de archivo compatible con Structs es de 2 m por defecto, y se modifica por constantes:
<!-4. Modifique el tamaño máximo de los archivos cargados a 30 m->
<constant name = "struts.multipart.maxsize" value = "31457280"/>
b. Restringir el tipo permitido de archivos cargados: solo se permiten interceptores de archivos con sufijos txt/jpg: inyectar parámetros para limitar los tipos de carga de archivos
< name = "FileUpload.AnlowedTypes"> Text/Plain </amamr>-> </Interceptor-Ref>
2. Descargue el archivo
Descarga de archivos de Struts, 2 maneras:
Método 1: Escriba datos de flujo de bytes al navegador a través del objeto de respuesta; Establezca el método de encabezado de respuesta para descargar 2: método de struts
Descargue el archivo Struts:
Copie el código de la siguiente manera: <Result-type name = "stream"/>
Primero, tenga en cuenta que crea una nueva carpeta de carga en el directorio de Webroot y coloca el archivo que desea proporcionar a la carpeta descargada.
cargar.xml
<action name="down_*" method="{1}"> <!-- List display--> <result name="list">/e/list.jsp</result> <!-- Download operation--> <result name="download" type="stream"> <!-- The type of file running download: Specified as all binary file types--> <param name="contentType">application/octet-stream</param> <!-- The corresponding attribute in Action: Devuelve la propiedad de la transmisión [en realidad getAttrinputStream ()]-> <param name = "inputName"> attrinputStream </param> <!-El encabezado de descarga, incluyendo: el nombre del archivo que se muestra por el navegador-> <param name = "contentDisposition"> adjunto; filen = $ { name = "BufferSize"> 1024 </amam> </ resultado> </solcion>list.jsp
<body> <table align = "Center"> <tr> <td> Number </td> <td> nombre de archivo </td> <td> operación </td> </td> < %@tglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %> <c: foreach var = "fileach" fileRame " elementos = "$ {filenames}" varstatus = "vs"> <tr> <td> $ {vs.Count} </td> <td> $ {nombre de archivo} </td> <td> <!-construir una url-> <c: url var = "url" valor = "down_down"> <c: param name = "filename" "" " value = "$ {FileName}"> </c: Param> </c: url> <a href = "$ {url}"> descargar </a> </td> </tr> </c: foreach> </body </body>Región
/***Descarga de archivos*1. Muestre la lista de todos los archivos que se descargarán*2. Descargar archivos** /public Class downloadAction extiende ActionSupport { /******************* 1. Muestre la lista de todos los archivos que se descargarán ****************************/public String list () lanza la excepción {// Obtener la ruta de carga de carga string string = servletactionContext.getServletContext (). GetRealPath ("/upload"); // archivo de archivo de objeto de directorio = nuevo archivo (ruta); // Obtenga el nombre del archivo de todos los archivos a descargar cadena [] filenames = file.list (); // Guardar ActionContext ac = ActionContext.getContext (); // Obtenga el mapa que representa el mapa de solicitud (el segundo camino) <String, Object> request = (map <string, object>) ac.get ("request"); request.put ("nombres de archivo", nombres de archivo); devolver "lista"; } /****************** 2. Descargar el archivo ******************************/ // 1. Obtenga el nombre del archivo del archivo a descargar el nombre de archivo de cadena privada; public void setFileName (string filename) {// manejar el problema en los parámetros aprobados (obtener envío) try {filename = new String (filename.getBytes ("iso8859-1"), "utf-8"); } Catch (UnsupportedEncodingException e) {tirar nueva runtimeException (e); } // Asignar esto.fileName = FileName; } // 2. Descargue el método comercial enviado (configure la transmisión en struts.xml) public string down () lanza la excepción {return "download"; } // 3. Métodos para devolver el archivo de archivo Public InputStream getAttrinputStream () {return ServletActionContext.getServletContext (). GetResourceASStream ("/upload/" + FileName); } // 4. Descargue el nombre del archivo que se muestra (nombre de archivo que se muestra por el navegador) public String getdownFileName () {// se requiere la codificación china {FileName = Urlencoder.enDode (nombre de archivo, "UTF-8"); } Catch (UnsupportedEncodingException e) {tirar nueva runtimeException (e); } retorno de archivo de archivo; }}Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.