在前面我已经介绍过了利用Struts 2控制单文件上传:Struts 2读书笔记-----使用Struts 2控制文件上传 .其实对于多文件上传也差不多。加入我们要同时控制三个文件进行上传。那么页面得有三个文件上传域。在这里主要介绍采用数字和list来控制文件上传。
一、利用数组
利用数组来封装3个文件域。为了让数组一次性封装三个文件,我们需要将三个文件域的name属性设置为一样的。如下:
<form action="upload.action" method="POST" enctype="multipart/form-data">
文件标题:<input type="text" name="title"/><Br />
第一个文件:<input type="file" name="upload"/><br/>
第二个文件:<input type="file" name="upload"/><br/>
第三个文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传"/>
</form>
在处理上传的过程中,我们需要3个数组来分别封装文件名、文件类型、文件内容
public class UploadToArrayAction extends ActionSupport {
private String title; // 文件标题
private File[] upload; // 使用file数组封装多个文件域对应的文件内容
private String[] uploadContentType; // 使用字符串数组封装多个文件域对应的文件类型
private String[] uploadFileName; // 使用字符串数组封装对个文件域对应的文件名
private String savePath; // 动态设置文件属性
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
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;
}
public String execute() throws Exception{
//取得需要上传的文件数组
File[] files = getUpload();
//遍历每个需要上传的文件
for (int i = 0; i < files.length; i++) {
//以服务器的文件保存地址和源文件名建立上传文件输出流
String root = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/upload");
FileOutputStream fos = new FileOutputStream(root+"\\"+getUploadFileName()[i]);
//以每个需要上传的文件建立输入流
FileInputStream fis = new FileInputStream(files[i]);
//将每个需要上传的文件写入
byte[] buffer = new byte[1024];
int length = 0;
while ((length=fis.read(buffer))>0) {
fos.write(buffer,0,length);
}
fos.close();
}
return SUCCESS;
}
}
struts.xml配置文件的配置
<package name="mystruts" extends="struts-default">
<action name="upload" class="com.app.action.UploadToArrayAction">
<!-- 动态设置Action的savePath属性 -->
<param name="savePath">/upload</param>
<!-- 配置文件上传的拦截器 -->
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/png,image/gif,image/jpeg</param>
<param name="maximumSize">20480000</param>
</interceptor-ref>
<!-- 配置系统默认的拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">/success.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>
配置这个Action与配置单文件上传的Action其实是没有什么其他的区别的。
二、利用List
其实利用List和利用数组时没有什么区别的。只是将Array数组改为了泛型了list而已了。
public class UploadToListAction extends ActionSupport {
private String title; // 文件标题
private List<File> upload; // 使用file数组封装多个文件域对应的文件内容
private List<String> uploadContentType; // 使用字符串数组封装多个文件域对应的文件类型
private List<String> uploadFileName; // 使用字符串数组封装对个文件域对应的文件名
private String savePath; // 动态设置文件属性
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List<File> getUpload() {
return upload;
}
public void setUpload(List<File> upload) {
this.upload = upload;
}
public List<String> getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
public List<String> getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getSavePath() {
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public String execute() throws Exception {
// 取得需要上传的文件数组
List<File> files = getUpload();
// 遍历每个需要上传的文件
for (int i = 0; i < files.size(); i++) {
String root = ServletActionContext.getRequest().getSession().getServletContext().getRealPath("/upload");
FileOutputStream fos = new FileOutputStream(root+"\\"+getUploadFileName().get(i));
FileInputStream fis = new FileInputStream(files.get(i));
byte[] buffer = new byte[1024];
int length = 0;
while((length=fis.read())>0){
fos.write(buffer,0,length);
}
fos.close();
}
return SUCCESS;
}
}
其他的配置和数组的差不多,就不写了................
分享到:
相关推荐
struts-2.3.4-all.zip 笔记
Struts2 笔记12-20 浪曦风中叶
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
struts2学习笔记总结
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
Struts2学习笔记,介绍了struts2的基础部分
SSH笔记-Spring整合Struts2,作用是使用 IOC 容器来管理 Struts2 的 Action
专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用) struts.multipart.saveDir The directory to use for storing uploaded files 设置存储上传...
Namespace决定了action的访问路径,默认为“”,可以接收所有路径的action,如果没有找到相应的namespace时,则使用namespace为空的action Namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/...
Struts2-Spring-Hibernate整合,和Struts2,Hibernate的学习笔记。密码是kmp3314.
Struts2框架笔记,自己整理很详细 不看视频 看文档也能速度搞定Struts2
2)把struts2框架的配置文件struts.xml复制粘贴到项目中的src下面(同时也可以把log4j.properties放到src下) 在这里我们主要是要的这个struts.xml文件的中的声明部 分,以前写这个文件的话可以直接复制粘贴过来,没有写...
毕生学习struts2的学习笔记,整理了好久,实打实的干货
struts2学习笔记,拦截器,action,所需jar包,从零开始
详细讲解了struts2使用commons-fileupload上传文件的方法
StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记StrutsMenu使用笔记
学习Struts2第三天笔记
Struts2框架
本人学习struts2的笔记,希望大家可以多多学习以后共同交流
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换