文件上传
1.上传单个文件

2.上传多个文件

 
1.上传单个文件
实现步骤:
(1)导入一个Jar包:commons-io-1.3.2.jar。只所以要导入这个Jar包,是因为要用到一个工具类FileUtil。若不使用此工具类,就无需导入此包了。
(2)把form表单的enctype设置为:“multipart/form-data”,method设置为“post”,否则此表单不能用于上传。
如下:
<form enctype="multipart/form-data" action="xxx.action" method="post">
<input type="file" name="uf">
</form>
(3)在Action类中添加以下属性
  private File uf;//上传的文件
private String ufFileName;//文件名称
           注意:蓝色部分对应于表单中文件字段的名称。而FileName是必须的。
最后是,在Action方法中实现对上传文件的操作。

2.上传多个文件

与上传单个文件相比,发生了如下几个变化:
    (1)提交表单中出现多个文件上传栏,这多个的name属性名必须完全相同。
    (2)Action中文件不再为File类型了,而是File类型的数组或List。当然,文件名也为相应的数组或List了。
    (3)Action方法需遍历这些数组来上传这些文件。

 下面例子都已导入struts2核心jar包基础上,又导入了commons-io-1.3.2.jar包。
实例1:上传单个文件—fileupload
代码文档目录如下:

Step1:编写index.jsp页面
<%@ page pageEncoding="utf-8"%>

<html>
<head> <title>upload page</title> </head> <body>
<form action="single.action" enctype="multipart/form-data" method="post"> 文件<input type="file" name="uf"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>

Step2:编写SingleFileUploadAction.java

package actions;

import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionContext; public class SingleAction {
private File uf;
private String ufFileName;
public File getUf() {
return uf;
}
public void setUf(File uf) {
this.uf = uf;
}
public String getUfFileName() {
return ufFileName;
}
public void setUfFileName(String ufFileName) {
this.ufFileName = ufFileName;
} public String execute(){
String savePath="D:/";
if(uf!=null)
{
File saveFile=new File(savePath,ufFileName);
try {
//将 uf 文件的内容复制到saveFile中。
FileUtils.copyFile(uf, saveFile);
ActionContext.getContext().put("message","文件上传成功!");
} catch (IOException e) {
e.printStackTrace();
ActionContext.getContext().put("message","文件上传失败!");
} }else{
ActionContext.getContext().put("message","没有指定要上传的文件"); }
System.out.println(ufFileName);
return "success";
} }
Step2:编写web.xml与struts.xml
web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

修改上传文件大小限制:默认最大2M
使用方法:
    在struts.xml中添加下面这段代码:

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

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="9999242880"></constant>
<package name="one" extends="struts-default">
<action name="single" class="actions.SingleAction">
<result>/message.jsp</result>
</action> </package> </struts>

Step3:编写message.jsp

<%@ page pageEncoding="utf-8" isELIgnored="false"%>

<html>
<head> <title>message page</title> </head> <body>
提示信息:${message} </body>
</html>
注意,当文件内容为空时,tomcat后台会报错。
部署发布,启动tomcat,输入地址:
http://127.0.0.1:8080/single_file_upload/
 

实例2:上传多个文件—fileupload
Step1:编写index.jsp页面
<%@ page pageEncoding="utf-8"%>

<html>
<head> <title>upload page</title> </head> <body>
<form action="multiple.action" enctype="multipart/form-data" method="post"> 文件1<input type="file" name="ufs"/><br/>
文件2<input type="file" name="ufs"/><br/>
文件3<input type="file" name="ufs"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>

Step2:编写MultipleAction.java

package actions;

import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ActionContext; public class MultipleAction {
private File[] ufs;
private String[] ufsFileName; public File[] getUfs() {
return ufs;
} public void setUfs(File[] ufs) {
this.ufs = ufs;
} public String[] getUfsFileName() {
return ufsFileName;
} public void setUfsFileName(String[] ufsFileName) {
this.ufsFileName = ufsFileName;
} public String execute() {
StringBuffer sb=new StringBuffer();
String savePath = "D:/";
if (ufs != null) {
for (int i = 0; i < ufs.length; i++) {
if (ufs[i] != null) {
File saveFile = new File(savePath,ufsFileName[i]);
try {
FileUtils.copyFile(ufs[i], saveFile);
sb.append("文件"+(i+1)+"上传成功!");
} catch (IOException e) {
e.printStackTrace();
sb.append("文件"+(i+1)+"上传失败!");
}
} }
}else {
sb.append("文件指定要上传的文件!"); }
ActionContext.getContext().put("message",sb.toString());
return "success";
} }

Step2:编写web.xml与struts.xml

web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

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="one" extends="struts-default">
<action name="multiple" class="actions.MultipleAction">
<result>/message.jsp</result>
</action> </package> </struts>

Step3:编写message.jsp

<%@ page pageEncoding="utf-8" isELIgnored="false"%>

<html>
<head>
<title>message page</title>
</head> <body>
提示信息:${message} </body>
</html>

部署发布,启动tomcat,输入地址:

http://127.0.0.1:8080/mutiple_fle_upload/

注意:1.txt有内容,2.txt有内容,3.txt内容为空。

11.struts2文件上传的更多相关文章

  1. struts2文件上传大小限制问题小结

    一:首先看一下程序执行中出现的对应报错信息,如下所示: [WARN ] 2015-03-03 15:31:11 :Unable to parse request org.apache.commons. ...

  2. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

  3. struts2文件上传大小限制问题小结(引用)

    最后解决办法: 页面js控制上传文件的大小,在页面进行控制.如下代码 inputs是所有文本上传input DOM //名称信息 var nameStr=''; //大小信息 var sizeStr= ...

  4. struts2 文件上传和下载,以及部分源代码解析

    struts2 文件上传 和部分源代码解析,以及一般上传原理 (1) 单文件上传 一.简单介绍 Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form ...

  5. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  6. springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传

    总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...

  7. Struts2文件上传下载

    Struts2文件上传 Struts2提供 FileUpload拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容,fileUpload拦截器 默认在defau ...

  8. Struts2文件上传和下载(原理)

    转自:http://zhou568xiao.iteye.com/blog/220732 1.    文件上传的原理:表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:1)     ...

  9. Struts2 文件上传

    一:表单准备 ① 要想使用HTML 表单上传一个或多个文件     –须把 HTML表单的 enctype属性设置为multipart/form-data     –须把HTML 表单的method ...

随机推荐

  1. Oracle EBS - PO Approval

    PO Approval Except Standard Flow: 1. Personal setting

  2. 用 string 进行插入、替代、查找输出下标等操作

    string s; s = "; string::iterator it; it = s.begin();//让s指向第一个元素 cout << s; system(" ...

  3. 七种机器内部排序的原理与C语言实现,并计算它们的比较次数与移动次数。

    内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 排序是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.排序分为 ...

  4. dev GridControl 根据鼠标坐标 选中行

    if (e.Button == System.Windows.Forms.MouseButtons.Right) { DevExpress.XtraGrid.Views.Grid.ViewInfo.G ...

  5. UI控件(UIButton)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // UIButtonTypeCustom = 0, ...

  6. C++高精度计时器——微秒级时间统计

    在C++中,经常需要通过计时来统计性能信息,通过统计的耗时信息,来分析性能瓶颈,通常情况下,可能毫秒级别的时间统计就足够用了,但是在毫厘必争的性能热点的地方,毫秒级别的统计还是不够的,这种情况下,就需 ...

  7. Azure PowerShell (8) 使用PowerShell设置Azure负载均衡器规则

    <Windows Azure Platform 系列文章目录> 注意:如果Azure面对的客户只是企业级客户,企业级客户使用NAT设备访问Internet的话,因为多个客户端使用相同的So ...

  8. 我心中的核心组件(可插拔的AOP)~大话开篇及目录

    回到占占推荐博客索引 核心组件 我心中的核心组件,核心组件就是我认为在项目中比较常用的功能,如日志,异常处理,消息,邮件,队列服务,调度,缓存,持久化,分布式文件存储,NoSQL存储,IoC容器,方法 ...

  9. 通过对表格数据的选择对input的value进行修改

    通过对表格数据的选择对input的value进行修改 $(function(){ $("#tb_gys").datagrid({ url:'getGysinfoList.actio ...

  10. Android开发-之第一个程序:HelloWorld!

    小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...