本文将详细讲解如何在 Struts2 Web 应用程序中实现文件上传下载功能,并配合两条示例代码进行演示。
1. 添加 Maven 依赖
在 pom.xml 文件中添加以下 Maven 依赖,用于支持文件上传下载功能。
<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.8.0</version>
</dependency>
2. 配置 Struts2 过滤器
在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件上传下载请求。
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 实现文件上传功能
3.1 编写文件上传表单
在 JSP 页面中添加文件上传表单。
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上传文件" />
</form>
3.2 处理文件上传请求
在 Struts2 控制器中处理文件上传请求,并将上传的文件保存到服务器。
public class FileUploadAction extends ActionSupport {
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String execute() throws Exception {
String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(basePath, fileFileName);
FileUtils.copyFile(this.file, file);
return SUCCESS;
}
}
该控制器中包含文件类型的属性 fileContentType
和文件名的属性 fileFileName
,用于处理上传的文件。
3.3 配置上传文件大小限制
在 struts.xml 文件中添加以下配置,用于限制上传文件的大小。
<constant name="struts.multipart.maxSize" value="2097152" />
其中 2097152
表示上传文件最大为 2 MB。
4. 实现文件下载功能
4.1 处理文件下载请求
在 Struts2 控制器中处理文件下载请求,并将服务器上的文件发送至客户端。
public class FileDownloadAction extends ActionSupport {
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() throws Exception {
String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(basePath, fileName);
return new FileInputStream(file);
}
public String execute() throws Exception {
return SUCCESS;
}
}
该控制器包含文件名的属性 fileName
和输入流的方法 getInputStream
,用于处理文件下载请求。
4.2 编写文件下载链接
在 JSP 页面中添加文件下载链接,点击链接可下载服务端的文件。
<s:a href="%{fileName}" download="%{fileName}">%{fileName}</s:a>
该链接使用 Struts2 的标签库 <s:a>
,链接地址为文件名,且在下载文件时使用了 download
属性,设置下载时显示的文件名。
以上便是 Struts2 控制文件上传下载功能的完整攻略,下面将通过两个示例进一步说明控制器的具体用法。
示例1:文件上传
- 创建 JSP 页面
upload.jsp
,并添加文件上传表单。
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上传文件" />
</form>
- 创建 Struts2 控制器
FileUploadAction
,用于处理文件上传请求。
public class FileUploadAction extends ActionSupport {
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String execute() throws Exception {
String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(basePath, fileFileName);
FileUtils.copyFile(this.file, file);
return SUCCESS;
}
}
- 在 struts.xml 文件中添加以下配置,用于将请求映射到控制器。
<package name="default" namespace="/" extends="struts-default">
<action name="upload" class="com.example.FileUploadAction" method="execute">
<result name="success">/success.jsp</result>
<result name="input">/upload.jsp</result>
</action>
</package>
- 在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件上传请求。
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 启动应用程序,上传文件并查看文件是否成功保存到
/upload
目录下。
示例2:文件下载
- 创建 JSP 页面
download.jsp
,并添加文件下载链接。
<s:a href="download?fileName=test.txt" download="test.txt">下载文件</s:a>
其中 fileName
参数为服务器上的文件名。
- 创建 Struts2 控制器
FileDownloadAction
,用于处理文件下载请求。
public class FileDownloadAction extends ActionSupport {
private String fileName;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getInputStream() throws Exception {
String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(basePath, fileName);
return new FileInputStream(file);
}
public String execute() throws Exception {
return SUCCESS;
}
}
- 在 struts.xml 文件中添加以下配置,用于将请求映射到控制器。
<package name="default" namespace="/" extends="struts-default">
<action name="download" class="com.example.FileDownloadAction" method="execute">
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
- 在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件下载请求。
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 启动应用程序,点击链接下载文件并查看是否成功下载。
以上便是本文所讲述的 Struts2 控制文件上传下载功能的完整攻略和示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2 控制文件上传下载功能实例代码 - Python技术站