Struts2应用实战 - 文件上传下载

2023-12-21 08:33:46 浏览数 (3)

简介

文件上传和下载是Web应用程序中常见的功能之一。Struts2作为一个优秀的Java Web框架,提供了便捷的方式来实现文件上传和下载功能。本文将以实战为主,介绍如何在Struts2应用中实现文件上传和下载功能。

文件上传

文件上传是指将本地计算机上的文件传输到服务器端。在Struts2中,你可以使用<s:file>标签来实现文件上传功能。

步骤1:创建表单页面

首先,创建一个表单页面,用于接收用户上传的文件。在该页面中使用<s:file>标签来创建文件上传表单。

代码语言:javascript复制
<%@ 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类型的字段来接收上传的文件。

代码语言:javascript复制
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;
        }
    }
}

在上述代码中,setFilesetFileFileNamesetFileContentType方法用于接收上传的文件、文件名和文件类型。

步骤3:配置Struts2配置文件

最后,在Struts2的配置文件struts.xml中配置Action映射。

代码语言:javascript复制
<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类型的字段来传递文件流。

代码语言:javascript复制
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>标签生成文件下载链接。

代码语言:javascript复制
<%@ 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映射。

代码语言:javascript复制
<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的文件上传下载技巧,你可以为你的应用增加更多的功能和便利性。

0 人点赞