Struts2 已经有默认的upload拦截器。我们只需要写参数,它就会自动帮我们封装好。
一、 单文件上传
1.1 导jar包
commons-fileupload-1.3.jar
commons-io-2.0.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
ognl-3.0.6.jar
struts2-core-2.3.15.3.jar
xwork-core-2.3.15.3.jar
1.2 web.xml配置Struts2核心过滤器
1 <filter> 2 <filter-name>struts2</filter-name> 3 <filter-class> 4 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 5 </filter-class> 6 </filter> 7 8 <filter-mapping> 9 <filter-name>struts2</filter-name> 10 <url-pattern>/*</url-pattern> 11 </filter-mapping>
XML Code
1.3 JSP文件上传页(注意file的name属性一定要与Action里面的File类型属性名一致)
1 <!-- 文件上传的必要前提:
2 1.请求方式必须是post
3 2.enctype属性的取值必须是multipart/form-data
4 3.提供一个文件选择域 文件上传 5 --> 6 7 <s:form action="upload.action" enctype="multipart/form-data"> 8 9 <s:file name="myfile" label="请选择文件"></s:file> 10 <s:submit value ="提交"></s:submit> 11 12 </s:form>
Jsp Code
1.4 实现文件上传的UploadAction
1 package com.fhcq.action; 2 3 import java.io.File; 4 import javax.servlet.ServletContext; 5 import org.apache.commons.io.FileUtils; 6 import org.apache.struts2.ServletActionContext; 7 import com.opensymphony.xwork2.ActionSupport; 8 9 public class UploadAction extends ActionSupport { 10 11 //表单上提供的字段 12 private File myfile; 13 //struts2在文件上传时提供的属性 14 private String myfileFileName;//上传的文件名。上传字段名称+FileName 注意大小写 15 private String myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写 16
17 public String upload (){ 18 19 //1.拿到ServletContext 20 ServletContext servletContext = ServletActionContext.getServletContext(); 21 //2.调用realPath方法,获取根据一个虚拟目录得到的真实目录 22 String realPath = servletContext.getRealPath("/WEB-INF/file"); 23 //3.如果这个真实的目录不存在,需要创建 24 File file = new File(realPath ); 25 if(!file.exists()){ 26 file.mkdirs(); 27 } 28 //4.把文件存过去 29 //拷贝:把文件的临时文件复制到指定的位置。注意:临时文件还在 30 //FileUtils.copyFile(myfile, new File(file,myfileFileName)); 31 32 //剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了 33 myfile.renameTo(new File(file,myfileFileName)); 34 return SUCCESS; 35 } 36 37 public File getMyfile() { 38 return myfile; 39 } 40 41 public void setMyfile(File myfile) { 42 this.myfile = myfile; 43 } 44 45 public String getMyfileFileName() { 46 return myfileFileName; 47 } 48 49 public void setMyfileFileName(String myfileFileName) { 50 this.myfileFileName = myfileFileName; 51 } 52 53 public String getMyfileContentType() { 54 return myfileContentType; 55 } 56 57 public void setMyfileContentType(String myfileContentType) { 58 this.myfileContentType = myfileContentType; 59 } 60 61 } 62
Action Code
1.5 配置struts.xml(注意:修改文件上传的总的大小。)
1 <struts> 2 <!--constant修改struts2的默认配置值 --> 3 <!--修改struct2称为开发模式,修改配置之后会自动加载 --> 4 <constant name="struts.devMode" value="true" /> 5 <!-- 限制上传文件的大小,第一种方式:通过修改struts2的常量。 6 在default.properties中配的struts.multipart.maxSize=2097152--> 7 <constant name="struts.multipart.maxSize" value="4097152" /> 8 9 <package name="p1" extends="struts-default"> 10 11 <action name ="upload" class = "com.fhcq.action.UploadAction" method="upload"> 12 13 <!-- 第二种方式:通过给fileUpload的拦截器注入参数的形式,控制上传文件的大小 14 无法使用 <param name="fileUpload.maximumSize">31457280</param>--> 15 <interceptor-ref name="defaultStack"> 16 <!-- 限制上传文件的扩展名。如果有多个,使用逗号分隔 17 <param name="fileUpload.allowedExtensions">jpg,png,bmp</param>--> 18 <!-- 限制上传文件的MIME类型。 如果有多个,使用逗号分隔 --> 19 <param name="fileUpload.allowedTypes">image/jpg,image/pjpeg,image/png</param> 20 </interceptor-ref> 21 <result>/index.jsp</result> 22 <result name="input" type="redirect">/upload.jsp</result> 23 </action> 24 25 </package> 26 27 </struts> 28
XML Code
1.6 配置fileupload_message.properties,放置在src下用来显示错误的资源文件信息
1 struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u6587\u4EF6\u7684\u7C7B\u578B\u4E0D\u662F\u88AB\u652F\u6301\u7684: {0} "{1}" "{2}" {3}
Properties Code
二、 多文件上传
在以上单文件上传的基础上,修改内容如下:
2.1 JSP文件上传页(注意file的name属性一定要与Action里面的File类型属性名一致)
1 <!-- 文件上传的必要前提: 2 1.请求方式必须是post 3 2.enctype属性的取值必须是multipart/form-data 4 3.提供一个文件选择域 5 --> 6 7 <s:form action="upload.action" enctype="multipart/form-data"> 8 9 <s:file name="myfile" label="请选择文件"></s:file> 10 <s:file name="myfile" label="请选择文件"></s:file> 11 <s:submit value ="提交"></s:submit> 12 13 </s:form>
Jsp Code
2.2 实现文件上传的UploadAction
1 package com.fhcq.action; 2 3 import java.io.File; 4 5 import javax.servlet.ServletContext; 6 7 import org.apache.struts2.ServletActionContext; 8 9 import com.opensymphony.xwork2.ActionSupport; 10 11 public class UploadAction extends ActionSupport { 12 13 //表单上提供的字段 14 private File[] myfile; 15 //struts2在文件上传时提供的属性 16 private String[] myfileFileName;上传的文件名。上传字段名称+FileName 注意大小写 17 private String[] myfileContentType;//上传文件的MIME类型。上传字段名称+ContentType 注意大小写 18 19 public String upload (){ 20 21 //1.拿到ServletContext 22 ServletContext servletContext = ServletActionContext.getServletContext(); 23 //2.调用realPath方法,获取根据一个虚拟目录得到的真实目录 24 String realPath = servletContext.getRealPath("/WEB-INF/files"); 25 //3.如果这个真实的目录不存在,需要创建 26 File file = new File(realPath ); 27 if(!file.exists()){ 28 file.mkdirs(); 29 } 30 //4.把文件存过去 31 //剪切:把临时文件剪切指定的位置,并且给他重命名。 注意:临时文件没有了 32 for(int i=0;i<myfile.length;i++){ 33 myfile[i].renameTo(new File(file,myfileFileName[i])); 34 } 35 36 return SUCCESS; 37 } 38 39 public File[] getMyfile() { 40 return myfile; 41 } 42 43 public void setMyfile(File[] myfile) { 44 this.myfile = myfile; 45 } 46 47 public String[] getMyfileFileName() { 48 return myfileFileName; 49 } 50 51 public void setMyfileFileName(String[] myfileFileName) { 52 this.myfileFileName = myfileFileName; 53 } 54 55 public String[] getMyfileContentType() { 56 return myfileContentType; 57 } 58 59 public void setMyfileContentType(String[] myfileContentType) { 60 this.myfileContentType = myfileContentType; 61 } 62 63 } 64
Action Code
时间: 2024-10-30 09:26:01