SpringMVC 单文件上传与多文件上传实例

下面就给您详细讲解“SpringMVC 单文件上传与多文件上传实例”的完整攻略。

一、SpringMVC 单文件上传实例

1.1 相关依赖说明

在 pom.xml 文件中增加以下依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

1.2 前端表单处理

前端页面需要增加一个文件上传 input,用于上传文件,示例如下:

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传" />
</form>

1.3 后端控制器处理

后端控制器中需要增加处理上传文件的方法,示例如下:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(HttpServletRequest request) throws Exception {
    // 上传文件的存储路径
    String uploadPath = request.getServletContext().getRealPath("/") + "upload";

    // 创建上传文件的存储路径
    File uploadDir = new File(uploadPath);
    if (!uploadDir.exists()) {
        uploadDir.mkdirs();
    }

    // 创建文件上传对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4096);
    factory.setRepository(uploadDir);
    ServletFileUpload upload = new ServletFileUpload(factory);

    // 获取上传的文件列表
    List<FileItem> items = upload.parseRequest(request);
    for (FileItem item : items) {
        // 判断是否为上传文件类型
        if (!item.isFormField()) {
            String fileName = item.getName();
            String filePath = uploadPath + File.separator + fileName;
            File file = new File(filePath);
            item.write(file);
        }
    }

    return "文件上传成功!";
}

以上后端处理逻辑主要是通过调用 ServletFileUpload 实现了上传文件的处理,其各个参数含义可以参考 maven 依赖包中所带源码中的注释。

二、SpringMVC 多文件上传实例

2.1 相关依赖说明

在 pom.xml 文件中增加以下依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

2.2 前端表单处理

前端页面需要增加多个文件上传 input,用于上传多个文件,示例如下:

<form method="post" action="/uploadMulti" enctype="multipart/form-data">
    <input type="file" name="file1" />
    <input type="file" name="file2" />
    <input type="file" name="file3" />
    <input type="submit" value="上传" />
</form>

2.3 后端控制器处理

后端控制器中需要增加处理上传多个文件的方法,示例如下:

@RequestMapping(value = "/uploadMulti", method = RequestMethod.POST)
@ResponseBody
public String uploadMulti(HttpServletRequest request) throws Exception {
    // 上传文件的存储路径
    String uploadPath = request.getServletContext().getRealPath("/") + "upload";

    // 创建上传文件的存储路径
    File uploadDir = new File(uploadPath);
    if (!uploadDir.exists()) {
        uploadDir.mkdirs();
    }

    // 创建文件上传对象
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(4096);
    factory.setRepository(uploadDir);
    ServletFileUpload upload = new ServletFileUpload(factory);

    // 获取上传的文件列表
    List<FileItem> items = upload.parseRequest(request);
    for (FileItem item : items) {
        // 判断是否为上传文件类型
        if (!item.isFormField()) {
            String fileName = item.getName();
            String filePath = uploadPath + File.separator + fileName;
            File file = new File(filePath);
            item.write(file);
        }
    }

    return "文件上传成功!";
}

以上后端处理逻辑和单文件上传类似,只是在获取上传的文件列表时可以处理多个上传文件,如果希望获取到具体的上传文件名称,可以通过 FileItem 对象的 getFieldName() 方法获取到 input 控件的 name 属性值。

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

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java实现对象按照其属性排序的两种方法示例

    Java是一种高级编程语言,它具有面向对象编程的特点。当我们使用Java进行编程时,很多时候需要对对象进行排序操作。本文将详细讲解如何在Java中实现对象按照其属性排序的两种方法。 方法一:使用Comparator接口 Comparator接口是Java中的一个接口,它可以用于比较对象的属性,从而实现排序功能。使用Comparator接口可以按照任何属性进行…

    Java 2023年5月26日
    00
  • Java中的静态内部类是什么?

    Java中的静态内部类是一种内部类,它具有访问外部类的静态成员变量和方法的能力。它与外部类的静态成员是相似的,可以通过类名直接访问。 定义静态内部类 静态内部类的定义方式与成员内部类的定义方式类似,只是需要在内部类名称前面加上static关键字。以下是一个示例: public class OuterClass { private static String …

    Java 2023年4月27日
    00
  • Springboot热部署实现原理及实例详解

    Spring Boot 热部署实现原理及实例详解 什么是热部署 热部署(Hot swapping)是指在应用程序运行时,无需停止或重启应用程序,就可以实时更新部分或全部代码和配置。热部署可以提高应用程序的开发和测试效率,缩短开发和测试的周期,特别是对于大型项目和复杂项目来说,效果尤为明显。 Spring Boot 热部署实现原理 Spring Boot 应用…

    Java 2023年5月19日
    00
  • Springboot项目平滑关闭及自动化关闭脚本

    下面是详细讲解“Spring Boot 项目平滑关闭及自动化关闭脚本”的完整攻略: 什么是 Spring Boot 项目平滑关闭? Spring Boot 项目平滑关闭是指在关闭 Spring Boot 项目时会先等待当前请求处理完成再关闭应用程序。这样可以保证处理请求的过程不被中断。 如何实现 Spring Boot 项目平滑关闭? 使用 actuator…

    Java 2023年5月20日
    00
  • finalize()方法的执行时机是什么?

    finalize()是Java中Object类的一个方法,用于在对象被垃圾回收之前执行特定的代码,比如关闭文件或释放资源等操作。当垃圾回收器准备回收某个对象时,它会忽略该对象的finalize()方法是否被重写,而是将其放入一个叫作“fianlization queue”的队列中,等待一个名为“Finalizer”的线程来执行它。 以下是finalize()…

    Java 2023年5月10日
    00
  • java的Hibernate框架报错“StaleStateException”的原因和解决方法

    当使用Spring Boot框架时,可能会遇到“OptimisticLockingFailureException”错误。这个错误通常是由于以下原因之一引起的: 数据库并发问题:如果多个用户同时访问同一条记录并尝试更新,则可能会出现此错误。在这种情况下,需要使用乐观锁或悲观锁来解决并发问题。 版本号不匹:如果您的实体类中的版本号与数据库中的版本号不匹配,则可…

    Java 2023年5月4日
    00
  • SpringBoot SpringSecurity 介绍(基于内存的验证)

    SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘SpringBoot已经为用户采用默认配置,只需要引入pom依赖就能快速启动Spring Security。目的:验证请求用户的身份,提供安全访问优势:基于Spring,配置方便,减少大量代码 内置访问控制方法 permitAll() 表示所匹配的 U…

    Java 2023年4月27日
    00
  • SpringBoot实现其他普通类调用Spring管理的Service,dao等bean

    实现其他普通类调用Spring管理的Service、DAO等Bean,可以使用Spring提供的上下文(ApplicationContext)对象,通过该对象获取Bean实例,从而实现Bean的调用。其中,SpringBoot在启动时会自动装载ApplicationContext对象,因此我们只需要获取ApplicationContext即可使用这个功能。 …

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