Struts2实现单文件或多文件上传功能

实现文件上传功能的步骤:

  1. 配置文件上传参数:在Strust2的配置文件struts.xml中设置maxFileSize参数,设置单个文件最大大小;以及maxRequestSize参数,设置总文件大小。
<constant name="struts.multipart.maxFileSize" value="5 * 1024 * 1024" />
<constant name="struts.multipart.maxRequestSize" value="10 * 1024 * 1024"/>
  1. 编写表单:在页面上添加一个用于文件上传的表单,设置属性enctype="multipart/form-data"。
<form action="upload_file" enctype="multipart/form-data" method="POST">
  <input type="file" name="uploadFile" />
  <input type="submit" value="上传文件" />
</form>
  1. 编写Action:实现文件上传功能的核心部分,主要分为单文件上传和多文件上传两种方式。

单文件上传示例:

public class UploadAction extends ActionSupport {

    private File uploadFile;
    private String uploadFileFileName;
    private String uploadFileContentType;

    public String execute() throws Exception {

        // 检查是否选择了文件
        if (uploadFile == null) {
            addActionError("请选择要上传的文件");
            return ERROR;
        }

        // 检查上传文件的类型
        if (!"image/jpeg".equals(uploadFileContentType)) {
            addActionError("上传文件必须是jpeg格式");
            return ERROR;
        }

        // 检查上传文件的大小
        if (uploadFile.length() > 1024 * 1024) {
            addActionError("上传文件大小不能超过1MB");
            return ERROR;
        }

        // 上传文件到服务器
        FileOutputStream fos = new FileOutputStream("上传目录/" + uploadFileFileName);
        FileInputStream fis = new FileInputStream(uploadFile);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }
        fis.close();
        fos.close();

        // 返回上传成功页面
        return SUCCESS;
    }

    public File getUploadFile() {
        return uploadFile;
    }

    public void setUploadFile(File uploadFile) {
        this.uploadFile = uploadFile;
    }

    public String getUploadFileFileName() {
        return uploadFileFileName;
    }

    public void setUploadFileFileName(String uploadFileFileName) {
        this.uploadFileFileName = uploadFileFileName;
    }

    public String getUploadFileContentType() {
        return uploadFileContentType;
    }

    public void setUploadFileContentType(String uploadFileContentType) {
        this.uploadFileContentType = uploadFileContentType;
    }

}

多文件上传示例:

public class MultiFileUploadAction extends ActionSupport {

    private List<File> uploadFiles = new ArrayList<File>();
    private List<String> uploadFilesFileName = new ArrayList<String>();
    private List<String> uploadFilesContentType = new ArrayList<String>();

    public String execute() throws Exception {

        // 检查是否选择了文件
        if (uploadFiles == null || uploadFiles.size() == 0) {
            addActionError("请选择要上传的文件");
            return ERROR;
        }

        // 逐个检查并上传文件
        for (int i = 0; i < uploadFiles.size(); i++) {

            // 检查上传文件的类型
            if (!"image/jpeg".equals(uploadFilesContentType.get(i))) {
                addActionError("上传文件必须是jpeg格式");
                continue;
            }

            // 检查上传文件的大小
            if (uploadFiles.get(i).length() > 1024 * 1024) {
                addActionError("上传文件大小不能超过1MB");
                continue;
            }

            // 上传文件到服务器
            FileOutputStream fos = new FileOutputStream("上传目录/" + uploadFilesFileName.get(i));
            FileInputStream fis = new FileInputStream(uploadFiles.get(i));
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }
            fis.close();
            fos.close();

        }

        // 返回上传成功页面
        return SUCCESS;
    }

    public List<File> getUploadFiles() {
        return uploadFiles;
    }

    public void setUploadFiles(List<File> uploadFiles) {
        this.uploadFiles = uploadFiles;
    }

    public List<String> getUploadFilesFileName() {
        return uploadFilesFileName;
    }

    public void setUploadFilesFileName(List<String> uploadFilesFileName) {
        this.uploadFilesFileName = uploadFilesFileName;
    }

    public List<String> getUploadFilesContentType() {
        return uploadFilesContentType;
    }

    public void setUploadFilesContentType(List<String> uploadFilesContentType) {
        this.uploadFilesContentType = uploadFilesContentType;
    }

}
  1. 测试:在Web容器中启动应用后,访问上传文件的页面,在表单中选择文件并上传,上传的文件保存在服务器的指定目录中。

总结:通过对Struts2框架的配置,添加文件上传的表单,编写Action的核心代码,就能比较简单地实现文件上传功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2实现单文件或多文件上传功能 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JAVA流控及超流控后的延迟处理实例

    JAVA流控及超流控后的延迟处理实例 什么是流控和超流控? 在高并发时,可能会发生流量过大的情况,这时就需要对流量进行控制,以避免系统过载。流控就是对系统能处理的请求进行限制,保证系统能够正常运行。流量超出限制后,可能会发生系统宕机等问题,此时就需要超流控,对请求进行拦截处理。 如何进行流控和超流控? 可以通过设置速率限制、并发请求数等方式进行流控,在超过限…

    Java 2023年5月31日
    00
  • java.lang.Runtime.exec的左膀右臂:流输入和流读取详解

    Java提供了Runtime.exec()方法来启动一个新进程。该方法可以返回Process对象,通过该对象可以控制和管理子进程的输入、输出以及错误流。这个方法中的参数是一个字符串,它描述了一个shell命令,应该如何来运行这个新的子进程。 为了更好地使用exec()方法,在使用exec()的时候,我们应该学会: 1.正确处理进程输出 2.合并输出流,正确地…

    Java 2023年5月26日
    00
  • Shell编程之变量的高级用法详解

    Shell编程之变量的高级用法详解 在Shell编程中,变量是经常被使用到的概念。除了基础的变量赋值外,还有更多高级的用法。在本文中,我们将讲解一些高级的变量用法。 1. 变量的替换和引用 1.1 命令替换 通过使用$( )或者` `将命令包含在内,可以将命令的结果值替换成变量值。例如: DATE=$(date +%Y-%m-%d) echo "T…

    Java 2023年5月26日
    00
  • tomcat 6.0.20在一个机器上安装多个服务的方法

    下面是详细的过程: 1. 下载安装Tomcat 首先需要在机器上下载Tomcat并进行安装。可以从官网下载Tomcat的安装文件(http://tomcat.apache.org/),根据机器操作系统的不同选择32位/64位版本。下载完成后,双击运行安装程序,并按照提示进行安装。 2. 配置Tomcat服务 安装完成后,需要为Tomcat服务进行配置。配置文…

    Java 2023年5月19日
    00
  • Spring 数据库连接池(JDBC)详解

    Spring 数据库连接池(JDBC)详解 什么是数据库连接池 在开发 Web 应用程序时,通常会使用数据库进行数据存储和管理。当客户端通过应用程序访问数据库时,应用程序需要使用 JDBC 连接到数据库并执行查询或更新操作。在实际开发中,频繁地创建和关闭连接非常消耗资源并且会影响应用程序的性能。为此,使用连接池可以提高性能并减少资源消耗。 数据库连接池是管理…

    Java 2023年5月20日
    00
  • Java使用JSONObject需要的6个jar包下载地址

    以下是 “Java使用JSONObject需要的6个jar包下载地址”的完整攻略: 1. 确认使用JSONObject所需要的6个jar包 在使用Java进行JSON操作时,通常需要使用到JSONObject对象。而要使用JSONObject,则需要同时引入6个jar包。这6个jar包分别是: json-20200518.jar commons-lang-2…

    Java 2023年5月26日
    00
  • 原生JS实现不断变化的标签

    实现不断变化的标签通常指的是像轮播图、动态效果等需要不断切换的元素。在原生JS实现这类效果时,可以使用定时器setTimeout或setInterval来实现,通过不断修改元素的属性值,从而达到动态变化的效果。 下面是一个基本的实现步骤: 1. HTML结构 首先,在HTML中需要定义需要变化的元素,比如轮播图的图片。这里以轮播图为例,HTML结构可以参考以…

    Java 2023年6月15日
    00
  • Java实现快速排序算法的完整示例

    下面我详细讲解一下“Java实现快速排序算法的完整示例”的攻略。 什么是快速排序算法 快速排序算法是一种经典的高效排序算法,采用分治的思想,其基本思路是将一个数组分为左右两部分,然后在左右两个部分分别进行排序。具体实现时,选择一个基准数,将数组中小于基准数的元素放到其左边,大于基准数的元素放到其右边,然后递归调用此方法,分别对左右两个部分进行排序。最终将排好…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部