很多应用都要求一个界面同时上传多个文件,在struts2框架也可以很方便的支持多文件同时上传,下面介绍一种使用数组实现多文件上传的方法。
第一步:在项目中创建FileUpArrayAction类,来处理多个文件同时上传,其代码如下:
package cn.test.fileUp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUpArrayAction extends ActionSupport {
private File[] upload;
private String[] uploadContentType;
private String[] uploadFileName;
private String savePath;
private Date upTime;
// public Date getCreateTime()
// {
// upTime=new Date();
// return upTime;
// }
private static void upLoad(File source,File target) throws IOException
{
InputStream inputStream=null;
OutputStream outPutStream=null;
try {
inputStream=new BufferedInputStream(new FileInputStream(source));
outPutStream=new BufferedOutputStream(new FileOutputStream(target));
byte[] buffer=new byte[1024];
int length=0;
while((length=inputStream.read(buffer))>0)
{
outPutStream.write(buffer, 0, length);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if (null!=inputStream)
{
inputStream.close();
}
if(null!=outPutStream)
{
outPutStream.close();
}
}
}
public String ArrayfileUpUI()
{
return "ArrayfileUpUI";
}
public String execute() throws IOException
{
for(int i=0;i<upload.length;i++)
{
String path1=ServletActionContext.getServletContext().getRealPath(savePath);
File f=new File(path1);
if(!f.exists())
{
f.mkdirs();
}
String path=ServletActionContext.getServletContext().getRealPath(savePath)+"\\"+this.uploadFileName[i];
File target=new File(path);
upLoad(this.upload[i],target);
}
return "success";
}
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 Date getUpTime() {
upTime=new Date();
return upTime;
}
public void setUpTime(Date upTime) {
this.upTime = upTime;
}
}
第二步,创建上传界面ArrayfileUpUI.jsp,其代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:form action="Arrayfile_execute" namespace="/" enctype="multipart/form-data">
<s:file name="upload" label="文件1:"></s:file>
<s:file name="upload" label="文件2:"></s:file>
<s:file name="upload" label="文件3:"></s:file>
<s:submit value="确定"></s:submit>
</s:form>
</html>
第三步,创建上传成功界面fsuccess.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:iterator value="uploadFileName" status="st">
<tr>
<td><s:property value="uploadFileName[#st.getIndex()]"/></td>
<td><s:date name="upTime" format="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</s:iterator>
</html>
第四步,配置struts.xml
<action name="Arrayfile_*" class="cn.test.fileUp.FileUpArrayAction" method="{1}">
<param name="savePath">/upload</param>
<result name="ArrayfileUpUI">/WEB-INF/jsp/ArrayfileUpUI.jsp</result>
<result name="success">/WEB-INF/jsp/fsuccess.jsp</result>
</action>
第五步,部署项目,启动tomcat,在浏览其中输入:http://localhost:8080/MyWeb/Arrayfile_ArrayfileUpUI