Struts2上传多文件也很简单。在Action中把文件对应的属性用数组或者集合接收就可以了。
File[] file;
String[] fileFileName;
String[] fileContentType;
1、FileUploadAction的代码
package cn.luxh.struts2.action;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 上传文件
* @author Luxh
*/
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 2642160699551232611L;
private static Log LOG = LogFactory.getLog(FileUploadAction.class);
protected File[] file;
protected String[] fileFileName;
protected String[] fileContentType;
/**
* 上传文件
*/
public String upload() {
try {
File[] files = uploadFile("/upload");
//after get files
//do some work
//...
}catch(Exception e) {
LOG.error("上传文件出错!");
throw new RuntimeException("上传文件出错");
}
return SUCCESS;
}
/**
* 处理上传的文件
* @param saveDir
* @return
* @throws IOException
*/
public File[] uploadFile(String saveDir) throws IOException {
if(saveDir==null ||"".equals(saveDir.trim())) {
saveDir = "/upload";
}
File[] files = null;
if(file != null && file.length > 0) {
String saveDirPath = ServletActionContext.getServletContext().getRealPath(saveDir);
File dirFile = new File(saveDirPath);
if(!dirFile.exists()) {
dirFile.mkdir();
}
files = new File[file.length];
for(int i=0;i<file.length;i++) {
if(file[i] != null) {
String newFileName = generateFileName(fileFileName[i]);
File destFile = new File(saveDirPath,newFileName);
FileUtils.copyFile(file[i], destFile);
files[i] = destFile;
}
}
}
return files;
}
/**
* 生成文件名
* @param fileName
* @return
*/
private String generateFileName(String fileName) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String formatDate = sdf.format(new Date());
int position = fileName.lastIndexOf(".");
String extension = "";
if(position!=-1) {
extension = fileName.substring(position);
}
return formatDate + extension;
}
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}
public String[] getFileFileName() {
return fileFileName;
}
public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
}
2、上传页面upload.jsp
<form action="${pageContext.request.contextPath}/fileUpload/upload" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>
请选择文件:
</td>
</tr>
<tr>
<td>
<input type="file" name="file">
</td>
</tr>
<tr>
<td>
<input type="file" name="file">
</td>
</tr>
<tr>
<td>
<input type="file" name="file">
</td>
</tr>
</table>
<tr>
<td>
<input type="submit" value="Submit" id="submit">
</td>
</tr>
</form>
3、配置文件struts.xml
<action name="upload" class="cn.luxh.struts2.action.FileUploadAction" method="upload">
<result>/WEB-INF/pages/common/success.jsp</result>
</action>
浙公网安备 33010602011771号