实现文件上传功能在Web应用程序中非常常见。在Java Web应用程序中,常用的框架之一是Struts2框架。下面是实现文件上传功能的完整攻略。
步骤1:添加依赖
要在Struts2应用程序中实现文件上传功能,我们需要添加一些依赖项。具体来说,我们需要添加以下依赖项:
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.X.X</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
这些依赖项包括Struts2核心,Apache Commons FileUpload和Apache Commons IO库。
步骤2:编写表单页面
要上传文件,您需要在Web页面上提供一个表单,以便用户可以选择要上传的文件。下面是一个简单的表单示例:
<s:form action="upload" method="POST" enctype="multipart/form-data">
<s:file name="file"/>
<s:submit value="Upload"/>
</s:form>
表单具有enctype
属性,它指定表单数据的编码类型。在文件上传的情况下,需要将enctype
属性设置为multipart/form-data
。
步骤3:编写Struts2 Action
现在,我们需要定义一个Struts2 Action处理上传文件。下面是一个简单的上传Action,它使用org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
类:
public class UploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public String execute() {
try {
String destPath = "C:/uploads/" + getFileFileName();
FileUtils.copyFile(file, new File(destPath));
} catch (IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public void setFile(File file) {
this.file = file;
}
public void setFileFileName(String fileName) {
this.fileFileName = fileName;
}
public void setFileContentType(String contentType) {
this.fileContentType = contentType;
}
public File getFile() {
return file;
}
public String getFileFileName() {
return fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
}
这个Action有以下几个重要的属性:
file
:表示上传的文件。fileFileName
:表示上传文件的文件名。fileContentType
:表示上传文件的内容类型。
在execute()
方法中,我们将上传的文件保存到磁盘上的指定位置。
注:在Struts2中支持多个文件上传,需要使用org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper
类。由于篇幅限制,这里不再展开。
示例1:演示上传单个文件
下面是一个完整的演示上传单个文件的示例。假设上传文件的Action名称为UploadAction
,页面的名称为upload.jsp
:
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>File Upload Example</title>
</head>
<body>
<s:form action="upload" method="POST" enctype="multipart/form-data">
<s:file name="file"/>
<s:submit value="Upload"/>
</s:form>
</body>
</html>
下面是一个简单的UploadAction
类,它将上传的文件保存到目标目录中。
public class UploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public String execute() {
try {
String destPath = "C:/uploads/" + getFileFileName();
FileUtils.copyFile(file, new File(destPath));
} catch (IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public void setFile(File file) {
this.file = file;
}
public void setFileFileName(String fileName) {
this.fileFileName = fileName;
}
public void setFileContentType(String contentType) {
this.fileContentType = contentType;
}
public File getFile() {
return file;
}
public String getFileFileName() {
return fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
}
示例2:演示同时上传多个文件
下面是一个完整的演示同时上传多个文件的示例。假设上传文件的Action名称为MultipleUploadAction
,页面的名称为multipleUpload.jsp
:
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Multiple File Upload Example</title>
</head>
<body>
<s:form action="multipleUpload" method="POST" enctype="multipart/form-data">
<s:file name="file1"/>
<s:file name="file2"/>
<s:submit value="Upload"/>
</s:form>
</body>
</html>
下面是一个演示同时上传多个文件的MultipleUploadAction
类。假设我们将上传的文件保存到目标目录中的uploads
目录:
public class MultipleUploadAction extends ActionSupport {
private Map<String, File> files = new HashMap<>();
private Map<String, String> filesFileName = new HashMap<>();
private Map<String, String> filesContentType = new HashMap<>();
public String execute() {
try {
for (Map.Entry<String, File> entry : files.entrySet()) {
String destPath = "C:/uploads/" + filesFileName.get(entry.getKey());
FileUtils.copyFile(entry.getValue(), new File(destPath));
}
} catch (IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public void setFiles(Map<String, File> files) {
this.files = files;
}
public void setFilesFileName(Map<String, String> filesFileName) {
this.filesFileName = filesFileName;
}
public void setFilesContentType(Map<String, String> filesContentType) {
this.filesContentType = filesContentType;
}
public Map<String, File> getFiles() {
return files;
}
public Map<String, String> getFilesFileName() {
return filesFileName;
}
public Map<String, String> getFilesContentType() {
return filesContentType;
}
}
在此示例中,我们使用了三个Map类型的属性来表示上传的文件,文件名和内容类型。要上传多个文件,需要在表单页面中提供多个文件上传字段。当表单提交时,Struts2框架将在execute()
方法中将多个文件的数据传递给MultipleUploadAction
类。然后,我们可以使用每个文件的数据将上传的文件保存到磁盘上。
除了示例1和示例2,还有许多其他的上传文件示例可以实现。以上示例仅用于演示如何在Struts2 Web应用程序中实现文件上传功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java Struts2框架下实现文件上传功能 - Python技术站