在Struts2中,上传任意多个文件也非常容易实现。首先,要想上传任意多个文件,需要在客户端使用DOM技术生成任意多个<input type=”file” />标签。name属性值都相同。multiUpload.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传多个文件</title>
<script language="javascript">
function addComponent()
{
var uploadHTML = document.createElement( "<input type='file' name='upload'>");
document.getElementById("files").appendChild(uploadHTML);
uploadHTML = document.createElement( "<p/>");
document.getElementById("files").appendChild(uploadHTML);
}
</script>
</head>
<body>
<input type="button" onclick="addComponent();" value="添加文件" />
<br />
<s:actionerror />
<form onsubmit="return true;" action="multiUpload.action" method="post"
enctype="multipart/form-data"><span id="files"> <input
type='file' name='upload' />
<p />
</span> <input type="submit" value="上传" /></form>
</body>
</html>
这里为了方便起见,我们直接使用原始的HTML表单,大家可以把这个可以上传任意多个文件的JSP页面和上面单文件上传的JSP页面做对比。上面的javascript代码可以生成任意多个<input type=’file’>标签,name的值都为upload。至于Action类,和上传单个文件的Action类基本一致,只需要将三个属性的类型改为数组或者List即可。
用数组实现的代码如下:
package org.leno.struts2.action;
import java.io.*;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class MultiUploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 代表上传文件的File对象
private File[] upload;
// 上传文件名
private String[] uploadFileName;
// 上传文件的MIME类型
private String[] uploadContentType;
// 保存上传文件的目录,相对于WEB应用程序的根路径,在struts.xml中配置
private String uploadDir;
public File[] getUpload() {
return upload;
}
public void setUpload(File[] upload) {
this.upload = upload;
}
public String[] getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String[] uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String[] getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String[] uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadDir() {
return uploadDir;
}
public void setUploadDir(String uploadDir) {
this