要实现这一点,客户端和服务器端都需要进行一些更改:
其中X是上载表单中的文件<s:file>标签的名称,例如:
<s:file name="fileUpload" />
那么X将是“fileUpload”。因此,在诉讼类中:
File[] fileUpload;
String[] fileUploadFileName;
String[] fileUploadContentType;
或者:
List<File> fileUpload;
List<String> fileUploadFileName;
List<String> fileUploadContentType;
请记住为这些变量正确创建getter和setter。
下面的示例程序演示了如何使用Struts2框架实现上传多个文件的功能。该应用程序显示了一个上传表单,允许用户一次选择三个要上传的文件。
上传的文件被复制到应用程序的.struts.xmlfile中配置的位置。
让我们来看看这个示例应用程序是如何编码的。
上传表单在pload.jsp页面中实现如下:
运行时,页面如下所示:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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=ISO-8859-1">
<title>Multiple Files Upload with Struts2</title>
</head>
<body>
<center>
<h2>Pick multiple files to upload</h2>
<s:form action="uploadFile" enctype="multipart/form-data" method="post">
<s:file name="fileUpload" label="Pick file #1" size="30"/>
<s:file name="fileUpload" label="Pick file #2" size="30"/>
<s:file name="fileUpload" label="Pick file #3" size="30"/>
<br/>
<s:submit value="Upload All" />
</s:form>
</center>
</body>
</html>
提交此表单时,将调用操作ploadFile。
在MultipleFilesUploadAction.java文件中实现Struts 2的动作类,如下所示:
package com.geekonjava.struts;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class MultipleFilesUploadAction {
private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;
/**
* This is the path to save uploaded file, which is configured in struts.xml
*/
private String saveDirectory;
public String doUpload() {
// copy the uploaded files into pre-configured location
for (int i = 0; i < fileUpload.length; i++) {
File uploadedFile = fileUpload[i];
String fileName = fileUploadFileName[i];
File destFile = new File(saveDirectory + File.separator + fileName);
try {
FileUtils.copyFile(uploadedFile, destFile);
} catch (IOException ex) {
System.out.println("Could not copy file " + fileName);
ex.printStackTrace();
}
}
return "success";
}
public File[] getFileUpload() {
return fileUpload;
}
public void setFileUpload(File[] fileUploads) {
this.fileUpload = fileUploads;
}
public String[] getFileUploadFileName() {
return fileUploadFileName;
}
public void setFileUploadFileName(String[] fileUploadFileNames) {
this.fileUploadFileName = fileUploadFileNames;
}
public String[] getFileUploadContentType() {
return fileUploadContentType;
}
public void setFileUploadContentType(String[] fileUploadContentTypes) {
this.fileUploadContentType = fileUploadContentTypes;
}
public String getSaveDirectory() {
return saveDirectory;
}
public void setSaveDirectory(String saveDir) {
this.saveDirectory = saveDir;
}
}
在这个POJO操作类中,我们使用三个数组来存储上传的文件:
private File[] fileUpload;
private String[] fileUploadFileName;
private String[] fileUploadContentType;
了解更多信息>Geek On Java<