SpringBoot实现文件上传与下载的完整指南(单文件、多文件、大文件分片)

 更新时间:2026年07月09日 08:29:45   作者:张老师技术栈  
文件上传下载是 Web 项目中的高频需求——用户头像、合同附件、产品图片,这篇讲 SpringBoot 中文件上传下载的完整实现,包含单文件、多文件、大文件分片上传等场景,需要的朋友可以参考下

文件上传下载是 Web 项目中的高频需求——用户头像、合同附件、产品图片。这篇讲 SpringBoot 中文件上传下载的完整实现,包含单文件、多文件、大文件分片上传等场景。

一、配置

1. 文件上传配置

spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 10MB        # 单个文件最大
      max-request-size: 50MB     # 总请求最大
      file-size-threshold: 2KB   # 文件大小阈值
      location: /tmp

2. 文件存储配置

@Configuration
@ConfigurationProperties(prefix = "file")
@Data
public class FileStorageConfig {
    private String uploadDir = "/data/uploads";
    private String downloadUrl = "/files";
}

二、单文件上传

@RestController
@RequestMapping("/file")
public class FileController {

    @Autowired
    private FileStorageConfig config;

    @PostMapping("/upload")
    public ResultVO<String> upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return ResultVO.error(400, "请选择文件");
        }

        try {
            // 1. 生成存储文件名
            String originalName = file.getOriginalFilename();
            String ext = originalName.substring(originalName.lastIndexOf("."));
            String saveName = IdUtil.simpleUUID() + ext;

            // 2. 按日期分目录
            String datePath = DateUtil.today();
            File dir = new File(config.getUploadDir(), datePath);
            if (!dir.exists()) dir.mkdirs();

            // 3. 保存文件
            File dest = new File(dir, saveName);
            file.transferTo(dest);

            // 4. 返回可访问路径
            String url = config.getDownloadUrl() + "/" + datePath + "/" + saveName;
            return ResultVO.success(url);
        } catch (IOException e) {
            return ResultVO.error(500, "上传失败");
        }
    }
}

三、多文件上传

@PostMapping("/uploads")
public ResultVO<List<String>> uploadMultiple(
        @RequestParam("files") MultipartFile[] files) {
    List<String> urls = new ArrayList<>();
    for (MultipartFile file : files) {
        // 逐个上传
        urls.add(upload(file));
    }
    return ResultVO.success(urls);
}

四、文件下载

@GetMapping("/download/{datePath}/{fileName}")
public void download(@PathVariable String datePath,
                     @PathVariable String fileName,
                     HttpServletResponse response) {
    File file = new File(config.getUploadDir(), datePath + "/" + fileName);
    if (!file.exists()) {
        response.setStatus(404);
        return;
    }
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition",
        "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

    Files.copy(file.toPath(), response.getOutputStream());
}

到此这篇关于SpringBoot实现文件上传与下载的完整指南(单文件、多文件、大文件分片)的文章就介绍到这了,更多相关SpringBoot文件上传与下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Deep Module深模块之软件设计

    Deep Module深模块之软件设计

    这篇文章主要介绍了软件设计之Deep Module深模块详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • java跟踪执行的sql语句示例分享

    java跟踪执行的sql语句示例分享

    这篇文章主要介绍了java跟踪执行的sql语句示例分享,需要的朋友可以参考下
    2014-03-03
  • java GUI编程之paint绘制操作示例

    java GUI编程之paint绘制操作示例

    这篇文章主要介绍了java GUI编程之paint绘制操作,结合实例形式详细分析了java GUI编程paint绘制相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-01-01
  • MyBatis的一级缓存和二级缓存以及优点说明

    MyBatis的一级缓存和二级缓存以及优点说明

    MyBatis的缓存机制包括一级缓存和二级缓存,一级缓存是SqlSession级别的缓存,开启默认,二级缓存是跨SqlSession的缓存,需要手动开启和配置,二级缓存的优点是减少数据库访问、提高性能、降低负载和提高可扩展性,同时需要注意缓存可能导致的数据不一致问题
    2025-02-02
  • 浅谈javaSE GUI (Action事件)

    浅谈javaSE GUI (Action事件)

    下面小编就为大家带来一篇浅谈javaSE GUI (Action事件)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • JAVA字符串类型switch的底层原理详析

    JAVA字符串类型switch的底层原理详析

    这篇文章主要给大家介绍了关于JAVA字符串类型switch的底层原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JAVA具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 搭建MyBatis开发环境及基本的CURD介绍

    搭建MyBatis开发环境及基本的CURD介绍

    这篇文章主要介绍了搭建MyBatis开发环境及基本的CURD,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java中利用栈实现字符串回文算法

    java中利用栈实现字符串回文算法

    给定一个由多个a和b组成的字符串数组,字符串中有一个特殊的字符X,位于字符串的正中间,例如(aaaabbbbXabaabbbb),如何判定该字符串是否回文
    2020-12-12
  • springboot中的starter及自定义方法详解

    springboot中的starter及自定义方法详解

    这篇文章主要介绍了springboot中的starter及自定义方法详解,Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境(条件)进行自动配置,需要的朋友可以参考下
    2023-11-11
  • Spring Boot 静态资源处理方式

    Spring Boot 静态资源处理方式

    这篇文章主要介绍了Spring Boot 静态资源处理方式,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09

最新评论