Struts2多文件上传原理和示例

一、创建上传文件的页面,代码如下所示

    1、Struts2也可以很方便地实现多文件上传。 在输入表单域增加多个文件域:multifileupload.jsp   

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
 2 <%@ taglib uri="/struts-tags" prefix="s" %>
 3 <html>
 4 <head>
 5     <title>多文件上传</title>
 6 </head>
 7 <body>
 8     <font color="red"><s:fielderror/></font>
 9     <form action="multiFileUpload.action" method="POST" enctype="multipart/form-data">
10         文件标题:<input type="text" name="title" size="50" value="${param.title }"/><br/>
11        <!-- 设置二个文件域,名字相同 -->
12         选择第一个文件:<input type="file" name="upload" size="50"/><br/>
13         选择第二个文件:<input type="file" name="upload" size="50"/><br/>
14        <input type="submit" value=" 上传 "/>
15     </form>
16 </body>
17 </html>

 2、在Action类中用数组来封装该多个文件域:MultiFileUploadAction.java     

 1 package org.qiujy.web.struts2;
 2 import java.io.BufferedInputStream;
 3 import java.io.BufferedOutputStream;
 4 import java.io.File;
 5 import java.io.FileInputStream;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.io.OutputStream;
10 import org.apache.struts2.ServletActionContext;
11 import com.opensymphony.xwork2.ActionSupport;
12 publicclass MultiFileUploadAction extends ActionSupport {
13     privatestaticfinalintBUFFER_SIZE = 16 * 1024;
14     // 文件标题
15     private String title;
16     // 用File数组来封装多个上传文件域对象
17     private File[] upload;
18     // 用String数组来封装多个上传文件名
19     private String[] uploadFileName;
20     // 用String数组来封装多个上传文件类型
21     private String[] uploadContentType;
22     // 保存文件的目录路径(通过依赖注入)
23     private String savePath;
24     //以下为所有属性的getter和setter。省略。。。
25     // 自己封装的一个把源文件对象复制成目标文件对象
26     privatestaticvoid copy(File src, File dst) {
27         InputStream in = null;
28         OutputStream out = null;
29         try {
30             in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
31             out = new BufferedOutputStream(new FileOutputStream(dst),
32                     BUFFER_SIZE);
33             byte[] buffer = newbyte[BUFFER_SIZE];
34             int len = 0;
35             while ((len = in.read(buffer)) > 0) {
36                 out.write(buffer, 0, len);
37             }
38         } catch (Exception e) {
39             e.printStackTrace();
40         } finally {
41             if (null != in) {
42                 try {
43                     in.close();
44                 } catch (IOException e) {
45                     e.printStackTrace();
46                 }
47             }
48             if (null != out) {
49                 try {
50                     out.close();
51                 } catch (IOException e) {
52                     e.printStackTrace();
53                 }
54             }
55         }
56     }
57     @Override
58     public String execute() throws Exception {
59         File[] srcFiles = this.getUpload();
60         // 处理每个要上传的文件
61         for (int i = 0; i < srcFiles.length; i++) {
62             // 根据服务器的文件保存地址和原文件名创建目录文件全路径
63             String dstPath = ServletActionContext.getServletContext()
64                     .getRealPath(this.getSavePath())
65                     + "\" + this.getUploadFileName()[i];
66             File dstFile = new File(dstPath);
67             this.copy(srcFiles[i], dstFile);
68         }
69         returnSUCCESS;
70     }
71 }

3、在Struts.xml中配置只需要改变action的名称配置其余基本不需要改变什么

时间: 2024-12-07 21:31:29

Struts2多文件上传原理和示例的相关文章

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

关于Struts2单文件上传

要实现Struts2框架的文件上传,需要用到2个jar包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 由于文件解析Struts2内部已经帮我们做好了,大大降低了开发难度,我们只需要在Action里设置好对应的参数,目录进行使用即可. 来个小示例: upload.jsp 这个页面的表单有三点需要注意的: 1.表单必须使用post方式提交 2.表单编码类型 enctype="multipart/form-data"   3.<s

[转]文件上传原理:Web上传文件的原理及实现

现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的CommonsFileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了CommonsFileUpload).在asp.net中也有相应的上传文件的控件. 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理.在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件

struts2实现文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

PHP单文件上传原理及上传函数的封装

<?php //单文件上传函数的封装 //文件上传原理:将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可. //文件的方向:客户端-->服务器(临时文件)-->指定目录,当文件进入服务器时它就是临时文件了,这时操作中要用临时文件的名称tmp_name. //在客户端设置上传文件的限制(文件类型和大小)是不安全的,因为客户能通过源代码修改限制,所以在服务端这里设置限制. //设置编码为UTF-8,以避免中文乱码 header('Content-Type:text/ht

struts2的文件上传

struts2的文件上传,布布扣,bubuko.com

Struts2实现文件上传报错(四)

1.具体错误如下 2014-5-2 21:38:29 com.opensymphony.xwork2.util.logging.jdk.JdkLogger error 严重: Exception occurred during processing request: null java.lang.NullPointerException at com.you.file.upload.action.FileUploadAction.execute(FileUploadAction.java:56)

Struts2实现文件上传报错(一)

1.具体报错如下 2014-5-1 23:02:38 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet [jsp] in context with path [/UploadFile] threw exception [An exception occurred processing JSP page /file.jsp at line 28 25: <table> 26

Struts2实现文件上传报错(二)

编译Lua时,出现这样的错误: gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX -c -o lua.o lua.clua.c:67:31: error: 查阅了一下,centOS上需要安装readline-devel ncurses-devel yum install readline-devel ncurses-devel 测试平台成功. [[email protected] lua-5.2.3]# make linux test cd src &