第一步:引入依赖
在项目的 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.26</version>
</dependency>
第二步:前端页面
首先我们需要在前端页面中添加一个 file 类型的 input 元素,如下所示:
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple>
<input type="submit" value="上传">
</form>
注意,这里的 enctype 属性需要设置为 multipart/form-data。
第三步:Action 类
接下来我们需要编写一个 Action 类来处理上传操作。首先定义一个成员变量来保存上传的文件列表:
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
然后在该类中添加一个名为 upload 的方法:
public String upload() {
for (int i = 0; i < file.size(); i++) {
File f = file.get(i);
String fileName = fileFileName.get(i);
String filePath = "/temp/" + fileName;
FileUtil.saveFile(f, filePath);
}
return SUCCESS;
}
在上述代码中,我们遍历了上传的文件列表,通过 FileUtil 工具类将文件保存到指定位置。其中 FileUtil.saveFile 方法的实现如下所示:
public static void saveFile(File file, String filePath) throws IOException {
FileOutputStream fos = new FileOutputStream(filePath);
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fis.close();
fos.close();
}
第四步:配置文件
最后一步是配置 Struts2,我们需要在 struts.xml 文件中添加一个 action。具体如下所示:
<action name="upload" class="com.example.UploadAction" method="upload">
<interceptor-ref name="fileUpload"/>
<result name="success">/success.jsp</result>
</action>
在上述代码中,我们使用了 Struts2 提供的 fileUpload 拦截器来处理文件上传操作。同时,我们定义了一个名为 success 的结果,用于展示上传成功的界面。
示例一:文件上传并保存到本地
下面我们来看一个具体的示例,该示例将文件上传到服务器并保存到本地磁盘中。
(1) 添加 fileupload.jsp 文件:
<!DOCTYPE html>
<html>
<head>
<title>Struts2文件上传-示例1</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
(2) 添加 UploadAction 类:
public class UploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public String execute() throws Exception {
String filePath = "D:/temp/" + fileFileName;
FileUtil.saveFile(file, filePath);
return SUCCESS;
}
// getters and setters omitted
}
(3) 添加 struts.xml 配置文件:
<action name="upload" class="com.example.UploadAction" method="execute">
<interceptor-ref name="fileUpload"/>
<result name="success">/success.jsp</result>
</action>
示例二:多文件上传并保存到服务器
下面我们再来看一个多文件上传的示例,该示例将上传的文件保存到服务器上。
(1) 添加 multifileupload.jsp 文件:
<!DOCTYPE html>
<html>
<head>
<title>Struts2文件上传-示例2</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple>
<input type="submit" value="上传">
</form>
</body>
</html>
(2) 添加 UploadAction 类:
public class UploadAction extends ActionSupport {
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public String execute() throws Exception {
for (int i = 0; i < file.size(); i++) {
File f = file.get(i);
String fileName = fileFileName.get(i);
String filePath = "D:/temp/" + fileName;
FileUtil.saveFile(f, filePath);
}
return SUCCESS;
}
// getters and setters omitted
}
(3) 添加 struts.xml 配置文件:
<action name="upload" class="com.example.UploadAction" method="execute">
<interceptor-ref name="fileUpload"/>
<result name="success">/success.jsp</result>
</action>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2实现多文件上传功能 - Python技术站