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日

相关文章

  • SpringMVC @RequestBody出现400 Bad Request的解决

    下面我为您详细讲解“SpringMVC @RequestBody出现400 Bad Request的解决”的完整攻略。 问题描述 在使用SpringMVC框架中,我们经常会用到 @RequestBody 注解来接收 HTTP 请求中的参数。但是,有时候我们会遇到使用 @RequestBody 得到 400 Bad Request 的错误响应码的情况。这是什么…

    Java 2023年5月26日
    00
  • SpringCloud Feign如何在远程调用中传输文件

    在SpringCloud Feign中,我们可以通过使用MultipartFile来传输文件。MultipartFile是Spring提供的一个接口,允许我们以字节流的形式传递文件。在远程调用时,我们可以在请求参数中添加MultipartFile类型的参数,即可将文件传输到远程服务。 对于使用Feign进行远程调用的场景,我们需要配置MultipartRes…

    Java 2023年5月20日
    00
  • ssm框架+PageHelper插件实现分页查询功能

    以实现用户管理模块的分页查询功能为例,在使用ssm框架搭建基础框架后,我们可以按照以下步骤实现分页查询功能。 步骤一:添加PageHelper依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifact…

    Java 2023年6月16日
    00
  • java的Hibernate框架报错“PersistentObjectException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“PersistentObjectException”错误。这个错误通常是由以下原因之一引起的: 持久化对象错误:如果持久化对象出现错误,则可能会出现此错误。在这种情况下,需要检查持久化对象的配置并进行必要的更改。 对象关系映射错误:如果对象关系映射出现错误,则可能会出现错误。在这种情况下,需要检查对象关系…

    Java 2023年5月5日
    00
  • Java Bean 作用域及它的几种类型介绍

    Java Bean 作用域及它的几种类型介绍 什么是 Java Bean Java Bean 是一种特殊的 Java 类,它具有无参构造器、私有属性和公共 setter/getter 方法,以封装数据,并提供给其他对象使用。Java Bean 通常被用于简化 Java 应用程序的开发过程,也可以用于在不同的设备和应用程序之间传输数据。在 Java Web 应…

    Java 2023年5月26日
    00
  • 在idea中将创建的java web项目部署到Tomcat中的过程图文详解

    下面我将为您详细讲解在Idea中将创建的Java Web项目部署到Tomcat中的完整攻略。 准备工作 在开始部署之前,我们需要先进行如下准备工作: 安装JDK环境 安装Tomcat服务器 安装Idea开发工具 创建Java Web项目 在Idea中创建Java Web项目的步骤如下: 打开Idea开发工具 点击”File” -> “New” -&gt…

    Java 2023年6月2日
    00
  • 猜你不知道Spring Boot的几种部署方式(小结)

    下面将为您详细介绍“猜你不知道SpringBoot的几种部署方式(小结)”这篇文章的完整攻略。 简介 在这篇文章中,我们将会介绍SpringBoot的几种部署方式,包括: 傻瓜式部署 War包部署 Jar包部署 我们将详细讲解每种部署方式的具体实现步骤以及使用场景,帮助读者更好地理解和应用SpringBoot的部署方式。 傻瓜式部署 傻瓜式部署是最简单的一种…

    Java 2023年5月15日
    00
  • Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    下面我将给出详细的攻略,包括原因分析以及解决方法。 问题描述 在Spring定时任务中,如果使用了@PostConstruct注解,在任务执行过程中,有可能会出现@PostConstruct方法被多次执行的情况,这种情况会导致任务执行异常。 原因分析 这种情况的出现通常是由于Spring容器中的定时任务配置有误所导致。在Spring容器中,如果使用了多个定时…

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