SpringBoot文件上传详解

一、前言

随着互联网的发展,文件上传成为了必备的功能之一,而SpringBoot作为目前最流行的开发框架之一,为文件上传提供了便捷而强大的解决方案。

二、使用multipart/form-data协议进行文件上传

HTTP协议中支持文件上传的ContentType为multipart/form-data,SpringBoot通过MultipartFile接口提供了对该协议的支持。

在Controller中使用MultipartFile实现文件上传:


@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
    // 处理上传文件
    return "success";
}

这里的@RequestParam(“file”)指定了上传文件对应的参数名,SpringBoot会自动将上传的文件封装成MultipartFile类型的参数传递给Controller方法。

上传文件的前端代码:



    <input type="file" name="file" />
    <input type="submit" value="上传" />

三、限制上传文件大小

默认情况下,SpringBoot没有对上传文件大小进行限制,但是可以通过配置上传文件大小来限制用户上传文件的大小。

在application.properties或是application.yml文件中添加以下配置:


# 限制上传文件大小为10MB
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

其中,max-file-size表示单个文件上传大小,max-request-size表示总上传大小。若超过限制,则会报FileSizeLimitExceededException异常。

四、保存上传文件

接收到上传文件后,一般需要将文件保存到服务器的磁盘或是云存储中,SpringBoot通过MultipartFile提供的transferTo方法可以从MultipartFile中获取文件内容并保存到指定的位置。


@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
    // 获取上传文件名
    String fileName = file.getOriginalFilename();
    // 拼接保存文件的路径
    String filePath = request.getSession().getServletContext().getRealPath("upload/");
    // 如果路径不存在则创建该路径
    File dest = new File(filePath + fileName);
    if (!dest.getParentFile().exists()) {
        dest.getParentFile().mkdirs();
    }
    try {
        // 保存文件
        file.transferTo(dest);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "success";
}

该示例中,首先获取上传文件的原始名称,接着通过HttpServletRequest获取到保存文件的路径,之后判断路径是否存在,若不存在则创建该路径,最后调用transferTo方法将文件保存到指定位置。

五、处理多文件上传

在某些情况下,需要一次性上传多个文件,此时可以使用SpringBoot提供的MultipartHttpServletRequest实现多文件上传。


@PostMapping("/multiUpload")
public String multiUpload(HttpServletRequest request) {
    List files = ((MultipartHttpServletRequest) request).getFiles("file");
    for (MultipartFile file : files) {
        // 处理上传文件
    }
    return "success";
}

该示例中,首先获取上传的所有文件通过MultipartHttpServletRequest的getFiles方法获取到MultipartFile集合,之后遍历集合处理每一个上传文件。

六、完成代码

上传文件Controller的完整代码:


@Controller
public class UploadController {

    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }

    @GetMapping("/multiUpload")
    public String multiUpload() {
        return "multiUpload";
    }

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        // 获取上传文件名
        String fileName = file.getOriginalFilename();
        // 拼接保存文件的路径
        String filePath = request.getSession().getServletContext().getRealPath("upload/");
        // 如果路径不存在则创建该路径
        File dest = new File(filePath + fileName);
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            // 保存文件
            file.transferTo(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }

    @PostMapping("/multiUpload")
    public String multiUpload(HttpServletRequest request) {
        List files = ((MultipartHttpServletRequest) request).getFiles("file");
        for (MultipartFile file : files) {
            // 处理上传文件
        }
        return "success";
    }
}

上传文件的HTML代码:





    
    文件上传


    
        <input type="file" name="file" />
        <input type="submit" value="上传" />
    


上传多文件的HTML代码:





    
    多文件上传


    
        <input type="file" name="file" multiple="multiple"/>
        <input type="submit" value="上传" />
    


原创文章,作者:NTXTJ,如若转载,请注明出处:https://www.506064.com/n/372562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NTXTJNTXTJ
上一篇 2025-04-24 06:40
下一篇 2025-04-24 06:40

相关推荐

  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • 使用 DRF 实现文件上传

    文件上传是 web 应用程序中最常见的需求之一,本文将介绍如何使用 Django Rest Framework (DRF) 来实现文件上传。通过本文,你将学习到如何使用 DRF 中…

    编程 2025-04-28
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • SpringBoot如何设置不输出Info日志

    本篇文章将带您了解如何在SpringBoot项目中关闭Info级别日志输出。 一、为什么要关闭Info日志 在开发中,我们经常会使用Log4j、Logback等框架来输出日志信息,…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论