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文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Activiti7与Spring以及Spring Boot整合开发

    Activiti7与Spring以及Spring Boot整合开发

    这篇文章主要介绍了Activiti7与Spring以及Spring Boot整合开发,在Activiti中核心类的是ProcessEngine流程引擎,与Spring整合就是让Spring来管理ProcessEngine,有感兴趣的同学可以参考阅读
    2023-03-03
  • Java中将UUID存储为Base64字符串的方法实现

    Java中将UUID存储为Base64字符串的方法实现

    使用Base64编码来对UUID存储在一些特定的场合被广泛的使用,本文主要介绍了Java中将UUID存储为Base64字符串的方法实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码

    Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码

    这篇文章主要介绍了Java中利用Alibaba开源技术EasyExcel来操作Excel表的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 使用IDEA对SpringBoot应用进行远程调试方式

    使用IDEA对SpringBoot应用进行远程调试方式

    文章介绍了如何在IDEA中对部署在服务器上的SpringBoot应用进行远程调试,通过配置远程调试端口和启动参数,本地IDEA可以设置断点并进行调试
    2025-02-02
  • SpringBoot应用优雅停机的3种标准方案

    SpringBoot应用优雅停机的3种标准方案

    所谓优雅停机(Graceful Shutdown),就是让应用在关闭前停止接收新请求;把正在处理的请求执行完;释放线程池、连接池、MQ 消费者等资源;最后再安全退出,今天讲清楚 SpringBoot优雅停机的3种标准方案,生产直接抄配置,需要的朋友可以参考下
    2026-03-03
  • Java实现SMS短信通发送手机验证码案例讲解

    Java实现SMS短信通发送手机验证码案例讲解

    这篇文章主要介绍了Java实现SMS短信通发送手机验证码案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot如何集成Token

    SpringBoot如何集成Token

    文章介绍了如何使用jjwt插件实现Token的生成和校验,该插件可以直接与SpringBoot集成,Token由三部分组成,分别是header、payload和signature,通过在请求头中传递Token,后端可以验证其合法性,从而提高安全性
    2025-01-01
  • Spring Boot Starter 的应用场景与自动配置方式

    Spring Boot Starter 的应用场景与自动配置方式

    本文介绍了Spring Boot Starter的使用场景,如何自定义Starter以及Spring Boot自动配置原理,Spring Boot Starter解决了依赖导入和配置繁琐的问题,通过自动配置类和xxxProperties类实现组件的自动注入和配置,感兴趣的朋友一起看看吧
    2025-03-03
  • Java方法递归调用实例解析

    Java方法递归调用实例解析

    这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • jenkins-node节点配置方式解读

    jenkins-node节点配置方式解读

    Jenkins通过主从节点实现分布式构建,支持负载均衡和特定环境任务,配置包括标签匹配、启动方式、环境变量及工具管理,可参数化选择节点执行
    2025-08-08

最新评论