SpringBoot文件上传的几种常见方式(单文件上传、多文件上传)

 更新时间:2025年08月22日 10:13:43   作者:1加1等于  
本文详解SpringBoot文件上传实现,涵盖单文件、多文件上传及大小类型限制方法,强调隐私保护与非法文件防范的社会责任,适配不同场景需求,提供技术解决方案与合规实践指导,感兴趣的朋友跟随小编一起看看吧

文件上传功能在很多系统中都占据非常重要的份置,软件开发人员在实现文件上传时,除了需要确保程序代码的稳健性和高维护性外,还需要从社会责任的角度审的需求,秉承合法、合规的职业理念进行数据读写,避免程序在保存用户上传的文件时造成不良的社会影响。例如,应该关注保护用户的隐私,避免用户的隐私泄露,以及杜绝上传非法文件。

文件上传的常见场景

在日常开发中,文件上传的场景多种多样。比如,在线教育平台上的视频资源上传,社交平台上的图片分享,以及企业内部的知识文档管理等。这些场景对文件上传的要求也各不相同,有的追求速度,有的注重稳定性,还有的需要考虑文件大小和安全性。因此,针对不同需求,我们有了秒传、断点续传和分片上传等解决方案。

文件上传是一个常见的需求。例如社交平台用户上传头像、电商系统商家上传商品图片、文档管理系统用户上传资料等都会用到。本文详细介绍SpringBoot关于单文件上传、多文件上传以及限制文件大小和类型等几种常见方式。

1. 单文件上传

单文件上传是最基础的文件上传场景,当用户选择一个文件并提交到服务器,可以使用 MultipartFile 类型来接收上传的文件。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class SingleFileUploadController {
    @PostMapping("/singleFileUpload")
    @ResponseBody
    public String singleFileUpload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "请选择要上传的文件";
        }
        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 定义文件存储路径
            String filePath = "uploads/";
            File dest = new File(filePath + fileName);
            // 检查目录是否存在,不存在则创建
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            // 保存文件
            file.transferTo(dest);
            return "文件上传成功";
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单文件上传</title>
</head>
<body>
    <form action="/singleFileUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="上传">
    </form>
</body>
</html>

enctype="multipart/form-data"是必须的

2. 多文件上传

多文件上传允许用户一次选择多个文件进行上传。可以使用 MultipartFile 数组来接收多个上传的文件。

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class MultipleFileUploadController {
    @PostMapping("/multipleFileUpload")
    @ResponseBody
    public String multipleFileUpload(@RequestParam("files") MultipartFile[] files) {
        if (files.length == 0) {
            return "请选择要上传的文件";
        }
        for (MultipartFile file : files) {
            if (file.isEmpty()) {
                continue;
            }
            try {
                String fileName = file.getOriginalFilename();
                String filePath = "uploads/";
                File dest = new File(filePath + fileName);
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdirs();
                }
                file.transferTo(dest);
            } catch (IOException e) {
                e.printStackTrace();
                return "文件上传失败";
            }
        }
        return "文件上传成功";
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
    <form action="/multipleFileUpload" method="post" enctype="multipart/form-data">
        <input type="file" name="files" multiple>
        <input type="submit" value="上传">
    </form>
</body>
</html>

input组件需要 multiple 支持多文件选择

3. 限制文件大小和类型

在实际开发的时候,可能需要对上传的文件大小和类型进行限制。可以通过配置SpringBoot的 MultipartConfigElement 来实现文件大小限制,同时在代码中检查文件类型。

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
@Configuration
public class MultipartConfig {
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        // 单个文件最大10MB
        factory.setMaxFileSize(DataSize.ofMegabytes(10));
        // 设置总上传数据总大小20MB
        factory.setMaxRequestSize(DataSize.ofMegabytes(20));
        return factory.createMultipartConfig();
    }
}

检查文件类型:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class FileUploadWithLimitController {
    @PostMapping("/fileUploadWithLimit")
    @ResponseBody
    public String fileUploadWithLimit(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "请选择要上传的文件";
        }
        // 检查文件类型
        String contentType = file.getContentType();
        if (!"image/jpeg".equals(contentType) && !"image/png".equals(contentType)) {
            return "只允许上传jpeg和png格式文件";
        }
        try {
            String fileName = file.getOriginalFilename();
            String filePath = "uploads/";
            File dest = new File(filePath + fileName);
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            file.transferTo(dest);
            return "文件上传成功";
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
}

getContentType 方法可以获取文件的MIME类型

到此这篇关于SpringBoot实战——文件上传一篇搞定的文章就介绍到这了,更多相关SpringBoot文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JVM中的GC初识

    JVM中的GC初识

    GC(Garbage Collection)称之为垃圾回收,是对内存中的垃圾对象,采用一定的算法进行内存回收的一个动作,这篇文章主要介绍了JVM中的GC初识,需要的朋友可以参考下
    2022-05-05
  • SpringMVC中拦截器的实现

    SpringMVC中拦截器的实现

    SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理,这篇文章主要介绍了SpringMVC的拦截器相关知识,需要的朋友可以参考下
    2022-01-01
  • 教大家使用java实现顶一下踩一下功能

    教大家使用java实现顶一下踩一下功能

    这篇文章主要教大家如何使用java实现顶一下踩一下功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • JAVA实现下载文件功能的两种方法

    JAVA实现下载文件功能的两种方法

    这篇文章主要介绍了JAVA实现下载文件功能的两种方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • JAVA实现较完善的布隆过滤器的示例代码

    JAVA实现较完善的布隆过滤器的示例代码

    这篇文章主要介绍了JAVA实现较完善的布隆过滤器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • java数据库开发之JDBC的完整封装兼容多种数据库

    java数据库开发之JDBC的完整封装兼容多种数据库

    这篇文章主要介绍了java数据库开发之JDBC的完整封装兼容多种数据库,需要的朋友可以参考下
    2020-02-02
  • java获取服务器基本信息的方法

    java获取服务器基本信息的方法

    这篇文章主要介绍了java获取服务器基本信息的方法,涉及java获取系统CPU、内存及操作系统等相关信息的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Maven配置中repositories、distributionManagement、pluginRepositories用法及将已有jar包部署到私服

    Maven配置中repositories、distributionManagement、pluginRepositori

    这篇文章主要介绍了Maven配置中repositories、distributionManagement、pluginRepositories用法及将已有jar包部署到私服,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Java简易登录注册功能实现代码解析

    Java简易登录注册功能实现代码解析

    这篇文章主要介绍了Java简易登录注册功能实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Maven 依赖冲突调解与版本控制问题记录

    Maven 依赖冲突调解与版本控制问题记录

    这篇文章主要介绍了Maven 依赖冲突调解与版本控制问题记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04

最新评论