Struts2学习笔记(十一)——文件上传下载

1、单文件上传

单文件上传步骤:

1)创建上传jsp页面

文件上传的表单提交方式必须是POST方式,编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded,比如:

1 <form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post"> 

2)创建处理文件上传Action类

  • 在Action类中声明相关属性:

    • 要声明与页面中表单name属性同名的属性,同名的属性的类型是File类型,该属性用来保存临时文件;
    • 要声明[同名的属性]ContentType属性,类型是String类型,该属性表示上传文件的类型;
    • 要声明[同名的属性]FileName属性,类型是String类型,该文件表示要上传的文件;
    • 给所有属性提供get和set方法。
  • 在Action类中提供处理上传的方法:
    • 获取要保存文件的位置;
    • 在目标文件夹内,创建一个与上传文件同名的文件;
    • 通过FileUtils工具类提供copyFile()方法,将临时文件内容拷贝到目标文件夹下的那个同名的文件;
    • 调用保存临时文件的属性的delete()方法删除临时文件(也就是File类型属性的delete方法)。

3)配置struts.xml文件

  • 设置上传文件大小,Struts2默认上传文件总大小为2MB,超过文件总大小,跳转input视图,通过<s:actionError /> 回显错误信息,在struts.xml 设置上传总大小:

    1 <constant name="struts.multipart.maxSize" value="20000000"></constant>

    设置上传文件总大小,对所有上传form有效,只想对当前form进行设置,可以设置fileUpload拦截器属性

  • 在fileUpload拦截器中有三个属性:
    • protected Long maximumSize:可以设置每一个上传文件的大小
    • protected Set<String> allowedTypesSet:设置允许上传文件的类型
    • protected Set<String> allowedExtensionsSet:设置允许的上传文件的后缀名

可以在struts.xml文件中配置这些属性:

1 <interceptor-ref name="defaultStack">
2     <!--配置上传文件的大小,这里配置的是上传文件的单个大小-->
3     <param name="fileUpload.maximumSize">20971520</param>
4     <!-- 配置上传文件允许的类型-->
5     <param name="fileUpload.allowedTypes">text/plain,application/msword</param>
6     <!-- 配置上传文件的扩展名-->
7     <param name="fileUpload.allowedExtensions">.txt,.doc</param>
8 </interceptor-ref>

允许的类型(allowedTypes)和允许的扩展名(allowedExtensions)必须保持一致。

单文件上传示例:

1)创建jsp页面

1 <body>
2  <form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post">
3     上传文件:<input type="file" name="upload">
4     <input type="submit" value="上传">
5  </form>
6 </body>

2)创建Action类

 1 public class UploadAction extends ActionSupport {
 2     private File upload;
 3     private String uploadContentType;
 4     private String uploadFileName;
 5
 6     public File getUpload() {
 7         return upload;
 8     }
 9
10     public void setUpload(File upload) {
11         this.upload = upload;
12     }
13
14     public String getUploadContentType() {
15         return uploadContentType;
16     }
17
18     public void setUploadContentType(String uploadContentType) {
19         this.uploadContentType = uploadContentType;
20     }
21
22     public String getUploadFileName() {
23         return uploadFileName;
24     }
25
26     public void setUploadFileName(String uploadFileName) {
27         this.uploadFileName = uploadFileName;
28     }
29
30     @Override
31     public String execute() throws Exception {
32         ServletContext sc = ServletActionContext.getServletContext();
33         //获取要保存文件的位置
34         String path = sc.getRealPath("/upload");
35         //创建一个与上传文件同名的文件
36         File file = new File(path, uploadFileName);
37         //将临时文件内容拷贝到目标文件夹下的那个同名的文件
38         FileUtils.copyFile(upload, file);
39         //删除临时文件
40         upload.delete();
41         return SUCCESS;
42     }
43 }

3)配置struts.xml文件

 1 <struts>
 2     <constant name="struts.devMode" value="true" />
 3     <constant name="struts.multipart.maxSize" value="200000000"/>
 4     <package name="default" namespace="/" extends="struts-default">
 5         <action name="uploadAction" class="com.sunny.action.UploadAction">
 6             <result>/success.jsp</result>
 7             <result name="input">/error.jsp</result>
 8             <interceptor-ref name="defaultStack">
 9                 <param name="fileUpload.maximumSize">20971520</param>
10                 <param name="fileUpload.allowedTypes">text/plain,application/msword</param>
11                 <param name="fileUpload.allowedExtensions">.txt,.doc</param>
12             </interceptor-ref>
13         </action>
14     </package>
15 </struts>

4)上传文件界面

5)上传成功后会跳转到success.jsp页面

6)项目下的upload文件夹下会有上传的文件

2、多文件上传

多文件上传的所有流程与单文件上传一致,但是需要注意的是:

  • 在页面中,虽然是多文件上传,但是页面中表单的name属性的值必须保持一致;
  • 在Action类中声明的相关属性,类型改成数组或者集合;
  • 在业务方法中,相关处理流程改成单文件上传的循环。

单文件上传示例:

1)创建jsp页面

1 <body>
2  <form action="${pageContext.servletContext.contextPath}/uploadAction.action" enctype="multipart/form-data" method="post">
3     上传文件:<input type="file" name="upload"><br>
4     上传文件:<input type="file" name="upload"><br>
5     上传文件:<input type="file" name="upload"><br>
6     上传文件:<input type="file" name="upload"><br>
7     <input type="submit" value="上传">
8  </form>
9 </body>

2)创建Action类

 1 public class UploadAction extends ActionSupport {
 2     private File[] upload;
 3     private String[] uploadContentType;
 4     private String[] uploadFileName;
 5
 6     public File[] getUpload() {
 7         return upload;
 8     }
 9
10     public void setUpload(File[] upload) {
11         this.upload = upload;
12     }
13
14     public String[] getUploadContentType() {
15         return uploadContentType;
16     }
17
18     public void setUploadContentType(String[] uploadContentType) {
19         this.uploadContentType = uploadContentType;
20     }
21
22     public String[] getUploadFileName() {
23         return uploadFileName;
24     }
25
26     public void setUploadFileName(String[] uploadFileName) {
27         this.uploadFileName = uploadFileName;
28     }
29
30     @Override
31     public String execute() throws Exception {
32         ServletContext sc = ServletActionContext.getServletContext();
33         //获取要保存文件的位置
34         String path = sc.getRealPath("/upload");
35         //创建一个与上传文件同名的文件
36         for (int i = 0; i < upload.length; i++) {
37             File file = new File(path, uploadFileName[i]);
38             //将临时文件内容拷贝到目标文件夹下的那个同名的文件
39             FileUtils.copyFile(upload[i], file);
40             //删除临时文件
41             upload[i].delete();
42         }
43         return SUCCESS;
44     }
45 }

3)配置struts.xml文件,和单文件上传的配置一样

 1 <struts>
 2     <constant name="struts.devMode" value="true" />
 3     <constant name="struts.multipart.maxSize" value="200000000"/>
 4     <package name="default" namespace="/" extends="struts-default">
 5         <action name="uploadAction" class="com.sunny.action.UploadAction">
 6             <result>/success.jsp</result>
 7             <result name="input">/error.jsp</result>
 8             <interceptor-ref name="defaultStack">
 9                 <param name="fileUpload.maximumSize">20971520</param>
10                 <param name="fileUpload.allowedTypes">text/plain,application/msword</param>
11                 <param name="fileUpload.allowedExtensions">.txt,.doc</param>
12             </interceptor-ref>
13         </action>
14     </package>
15 </struts>

4)上传文件界面

5)上传成功后会跳转到success.jsp页面

6)项目下的upload文件夹下会有上传的文件

时间: 2024-08-02 10:55:52

Struts2学习笔记(十一)——文件上传下载的相关文章

学习笔记_springmvc文件上传和拦截器

文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- maxUploadSize文件上传的最大值,单位是byte

Javaweb学习笔记10—文件上传与下载

 今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多 一*, 文件的上传:      1 *分析实现步骤: 1.1* 客户端浏览器通过文件域选择本地要上传的文件. * 点击"上传"按钮

深入分析JavaWeb 47 -- Struts2拦截器与文件上传下载

一.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 过滤器VS拦截器功能是一回事.过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面向切面)的编程思想,是可插拔的, 可以对访问某个 Action 方法之前或之后实施拦截. 拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用 Struts2执行原理

Codeigniter入门学习笔记11—文件上传

很久很久以前学习Codeigniter的笔记记录,很随意,但都是自己记录的,希望对需要的人有所帮助. 本文使用word2013编辑并发布 Postbird | There I am , in the world more exciting! Postbird personal website : http://www.ptbird.cn 文件上传 1.手动创建好上传目录 2.controllers/user ? 3.views/user/fileAction.php ????//表单需要强调是文

深入分析JavaWeb Item47 -- Struts2拦截器与文件上传下载

一.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 过滤器VS拦截器功能是一回事. 过滤器是Servlet规范中的技术,能够对请求和响应进行过滤. 拦截器是Struts2框架中的技术.实现AOP(面向切面)的编程思想.是可插拔的, 能够对訪问某个 Action 方法之前或之后实施拦截. 拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在訪问被拦截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用 Struts2运行原

SpringMVC 学习笔记(八)文件上传

Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring的文件上传功能,需现在上下文中配置 MultipartRes

SpringMVC:学习笔记(8)——文件上传

SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. 客户端编程 1.为了上传文件,必须将HTML表格的enctype属性值设为multipart/form-data,像下面这样: <form action="action" enctype="multipart/form-data" method="po

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

springMVC3学习(十一)--文件上传CommonsMultipartFile

使用springMVC提供的CommonsMultipartFile类进行读取文件 需要用到上传文件的两个jar包 commons-logging.jar.commons-io-xxx.jar 1.在spring配置文件中配置文件上传解析器 <!-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipar