简介
文件上传和下载是Web应用程序中常见的功能之一。Struts2作为一个优秀的Java Web框架,提供了便捷的方式来实现文件上传和下载功能。本文将以实战为主,介绍如何在Struts2应用中实现文件上传和下载功能。
文件上传
文件上传是指将本地计算机上的文件传输到服务器端。在Struts2中,你可以使用<s:file>
标签来实现文件上传功能。
步骤1:创建表单页面
首先,创建一个表单页面,用于接收用户上传的文件。在该页面中使用<s:file>
标签来创建文件上传表单。
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<s:form action="uploadFile" method="post" enctype="multipart/form-data">
<s:file name="file" label="选择文件" />
<s:submit value="上传文件" />
</s:form>
</body>
</html>
步骤2:创建Action类
接下来,创建一个Action类,用于处理文件上传逻辑。在Action类中,使用File
类型的字段来接收上传的文件。
import com.opensymphony.xwork2.ActionSupport;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileUploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public void setFile(File file) {
this.file = file;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String execute() {
try {
File destFile = new File("upload", fileFileName);
FileUtils.copyFile(file, destFile);
return SUCCESS;
} catch (IOException e) {
e.printStackTrace();
return ERROR;
}
}
}
在上述代码中,setFile
、setFileFileName
和setFileContentType
方法用于接收上传的文件、文件名和文件类型。
步骤3:配置Struts2配置文件
最后,在Struts2的配置文件struts.xml
中配置Action映射。
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="uploadFile" class="com.example.FileUploadAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
文件下载
文件下载是指将服务器上的文件传输到客户端。在Struts2中,你可以使用<s:a>
标签来生成下载链接。
步骤1:创建Action类
首先,创建一个Action类,用于处理文件下载逻辑。在Action类中,通过设置InputStream
类型的字段来传递文件流。
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import java.io.InputStream;
public class FileDownloadAction extends ActionSupport {
private InputStream fileStream;
private String fileName;
public InputStream getFileStream() {
return fileStream;
}
public String getFileName() {
return fileName;
}
public String execute() {
fileName = "example.txt"; // 文件名
fileStream = ServletActionContext.getServletContext().getResourceAsStream("/files/" fileName);
return SUCCESS;
}
}
在上述代码中,fileStream
字段用于存储文件流,fileName
字段用于设置下载时的文件名。
步骤2:创建下载链接
接下来,在JSP页面中使用<s:a>
标签生成文件下载链接。
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<title>文件下载</title>
</head>
<body>
<s:a action="downloadFile">下载文件</s:a>
</body>
</html>
步骤3:配置Struts2配置文件
最后,在Struts2的配置文件struts.xml
中配置Action映射。
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="downloadFile" class="com.example.FileDownloadAction">
<result type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">fileStream</param>
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action>
</package>
</struts>
总结
在本文中,我们以实际示例介绍了如何在Struts2应用中实现文件上传和下载功能。通过<s:file>
标签实现文件上传,通过<s:a>
标签生成文件下载链接。同时,我们还展示了如何在Action类中处理文件上传和下载逻辑,并在Struts2配置文件中配置Action映射。
文件上传和下载是Web应用中常见的功能,它们在实际项目中有着广泛的应用。通过掌握Struts2的文件上传下载技巧,你可以为你的应用增加更多的功能和便利性。