分享知识-快乐自己:Struts2文件上传及文件下载
1)Struts2单文件上传
action:类文件
package com.mlq.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import java.io.File; import java.io.IOException; /** * Struts2:单文件上传 * * @author asus */ public class UploadFileAction extends ActionSupport { //临时文件 private File upload; //文件类型(底层规定属性名称) private String uoloadContextType; //文件名称(底层规定属性名称) private String uploadFileName; //文件存放路径 private String savePath; @Override public void validate() { System.out.println("严重方法"); } //默认访问方法 @Override public String execute() throws IOException { //文件全路径 File destFile = new File(ServletActionContext.getRequest().getRealPath(savePath) + "\\" + getUploadFileName()); String path = destFile.getPath(); System.out.println(path + "------"); FileUtils.copyFile(upload, destFile); return "success"; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUoloadContextType() { return uoloadContextType; } public void setUoloadContextType(String uoloadContextType) { this.uoloadContextType = uoloadContextType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } }
struts.xml:核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="user" namespace="/user" extends="struts-default"> <!--全局配置信息--> <global-results> <result name="input">/upload.jsp</result> </global-results> <!--文件上传--> <action name="upload" class="com.mlq.action.UploadFileAction"> <!--内置设定action类中的属性值--> <param name="savePath">/upload</param> <result>/upload.jsp</result> <!--设定文件参数--> <interceptor-ref name="fileUpload"> <param name="maximumSize">512000</param> <param name="allowedType">image/jpg</param> </interceptor-ref> <!--默认的拦截器--> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
upload.jsp:JSP页面
<%@ taglib prefix="s" uri="/struts-tags" %> <%-- Created by IntelliJ IDEA. User: asus Date: 2018/10/4 Time: 10:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>StrutsTow文件上传</title> </head> <body> <div> <fieldset> <legend>Struts2文件上传</legend> <form action="/user/upload" enctype="multipart/form-data" method="post"> 选择文件:<input type="file" name="upload"> <input type="submit" value="提交"> </form> </fieldset> <br/><br/> <fieldset> <legend>上传的图片回显</legend> <img width="200px" height="300px" src="/upload/<s:property value='uploadFileName'/>"/> </fieldset> <br/><br/> <fieldset> <legend>错误信息</legend> <s:fielderror></s:fielderror> </fieldset> </div> </body> </html>
Web.xml:核心配置
<!--核心控制器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>upload.jsp</welcome-file> </welcome-file-list>
2)Struts2多文件上传
action:类文件
package com.mlq.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import java.io.File; import java.io.IOException; /** * Struts2:单文件上传 * * @author asus */ public class UploadsFileAction extends ActionSupport { //临时文件 private File[] upload; //文件类型 private String[] uoloadContextType; //文件名称 private String[] uploadFileName; //文件存放路径 private String savePath; @Override public void validate() { System.out.println("严重方法"); } //默认访问方法 @Override public String execute() throws IOException { for (int i = 0; i < upload.length; i++) { File temp=upload[i]; //文件全路径 File destFile = new File(ServletActionContext.getRequest().getRealPath(savePath) + "\\" + uploadFileName[i]); String path = destFile.getPath(); System.out.println(path + "------"); FileUtils.copyFile(temp, destFile); } return "success"; } public File[] getUpload() { return upload; } public void setUpload(File[] upload) { this.upload = upload; } public String[] getUoloadContextType() { return uoloadContextType; } public void setUoloadContextType(String[] uoloadContextType) { this.uoloadContextType = uoloadContextType; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; } public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } }
struts.xml:核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--全局总文件大小设置--> <constant name="struts.multipart.maxSize" value="5097152"/> <package name="user" namespace="/user" extends="struts-default"> <!--全局配置信息--> <global-results> <result name="input">/upload.jsp</result> </global-results> <!--文件上传--> <action name="upload" class="com.mlq.action.UploadsFileAction"> <!--内置设定action类中的属性值--> <param name="savePath">/upload</param> <result>/upload.jsp</result> <!--设定文件参数--> <interceptor-ref name="fileUpload"> <param name="maximumSize">512000</param> <param name="allowedType">image/jpg</param> </interceptor-ref> <!--默认的拦截器--> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
upload.jsp:JSP页面
<%@ taglib prefix="s" uri="/struts-tags" %> <%-- Created by IntelliJ IDEA. User: asus Date: 2018/10/4 Time: 10:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>StrutsTow文件上传</title> </head> <body> <div> <fieldset> <legend>Struts2文件上传</legend> <form action="/user/upload" enctype="multipart/form-data" method="post"> 选择文件:<input type="file" name="upload"> <br/> 选择文件:<input type="file" name="upload"> <br/> 选择文件:<input type="file" name="upload"> <input type="submit" value="提交"> </form> </fieldset> <br/><br/> <fieldset> <legend>上传的图片回显</legend> <s:iterator value="uploadFileName"> <img width="200px" height="300px" src="/upload/<s:property/>"/> </s:iterator> </fieldset> <br/><br/> <fieldset> <legend>错误信息</legend> <s:fielderror></s:fielderror> </fieldset> </div> </body> </html>
web.xml:核心配置
<!--核心控制器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>upload.jsp</welcome-file> </welcome-file-list>
3)Struts2文件下载
action:类文件
package com.mlq.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; /** * Struts2:文件下载 * * @author asus */ public class FileDownAction extends ActionSupport { /*** * 读取下载文件的目录 */ private String inputPath; /*** * 下载文件的文件名 */ private String fileName; /*** * 读取下载文件的输入流 */ private InputStream inputStream; public String getInputPath() { return inputPath; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public InputStream getInputStream() throws FileNotFoundException { String realPath = ServletActionContext.getServletContext().getRealPath(inputPath); System.out.println(realPath+"\\"+fileName); return new BufferedInputStream(new FileInputStream(realPath+"\\"+fileName)); } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } }
struts.xml:核心配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="user" namespace="/user" extends="struts-default"> <!--文件上传--> <action name="downLoad" class="com.mlq.action.FileDownAction"> <!--指定文件下载目录地址--> <param name="inputPath">/upload</param> <!--设置下载类型--> <result name="success" type="stream"> <!--设置发送到浏览器的MIMe类型--> <param name="contentType">application/octet-stream</param> <!--设置输入流的名称--> <param name="inputStream">inputStream</param> <!--提示用户打开还是下载--> <param name="contentDisposition">attachment;filename="${fileName}"</param> <!--缓冲区的大小:没有严格要求可随意设置--> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
index.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <%-- Created by IntelliJ IDEA. User: asus Date: 2018/10/4 Time: 10:32 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>StrutsTow文件下载</title> </head> <body> <div> <fieldset> <legend>Struts2文件下载</legend> <a href="/user/downLoad?fileName=t01a4036c8714c169fd.jpg">文件下载</a> </fieldset> </div> </body> </html>
web.xml核心配置
<!--核心控制器--> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
单文件上传Demo: 多文件上传Demo: 文件下载Demo: