SpringBoot 学习笔记心得单文件&多文件上传

Posted Adorable_Rocy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 学习笔记心得单文件&多文件上传相关的知识,希望对你有一定的参考价值。

前言:文件上传在开发中是比较常用的,SpringBoot为我们提供了封装好的类,我们只需要标明注解使用即可

1.创建表单文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        <form th:action="@{/upload}" method="post" enctype="multipart/form-data">
            名字:<input type="text" name="name"><br/>
            年龄:<input type="text" name="age"><br/>
            <input type="file" name="headImg">头像<br/>
            <input type="file" name="photos" multiple>生活照片<br/>
            <input type="submit" value="提交">
        </form>
</body>
</html>

2.编写controller解析请求/upload

  /**
     *     1. 使用MultipartFile 解析获取的文件
     *     2. @RequestPart 获取使用MultipartFile
     * @param name
     * @param age
     * @param headImg
     * @param photos
     * @return
     */
        @PostMapping("/upload")
        public String fileUoload(@RequestParam("name") String name ,
                                 @RequestParam("age") String age ,
                                 @RequestPart("headImg") MultipartFile headImg ,
                                 @RequestPart("photos") MultipartFile[] photos){
            log.info("上传的信息:name={},age={},headImg={},photos={}",
                    name,age,headImg.getSize(),photos.length);
            return "success";
        }

在这里插入图片描述

上传文件日志打印如下:

controller.FileUploadController    : 上传的信息:name=XIaoMing,age=23,headImg=60,photos=4

3.在文件上传中,有默认最大请求值的限定,如果超过了大小,会抛500异常。

SizeLimitExceededException: the request was rejected because its size (163185519) exceeds the configured maximum (10485760)

当我们其中的某个属性的时候,可以查看源码XXXAutoConfiguration,关于文件上传,查找的就是MultipartAutoConfiguration,在里面可以看到相关的配置前缀spring.servlet.multipart,于是有了修改属性:

在这里插入图片描述

查看属性值后,修改默认大小:

spring:
  servlet:
    multipart:
      max-file-size: 10MB 
      max-request-size: 100MB

再次上传文件,日志打印如下

在这里插入图片描述

上传的信息:name=XIaoMing,age=23,headImg=60,photos=16

4. 存储文件到本地磁盘上(或者OSS文件服务器上)

            if (!headImg.isEmpty()) {
                headImg.transferTo(new File("D:\\\\cache\\\\"+headImg.getOriginalFilename()));
            }

            if (photos.length > 0) {
                for (MultipartFile photo : photos) {
                    if (!photo.isEmpty()) {
                        photo.transferTo(new File("D:\\\\cache\\\\"+photo.getOriginalFilename()));
                    }
                }
            }

在这里插入图片描述
上传完毕
在这里插入图片描述
日志打印:

c.e.t.controller.FileUploadController    : 上传的信息:name=XiaoMing,age=22,headImg=60,photos=6

以上是关于SpringBoot 学习笔记心得单文件&多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot 学习笔记心得拦截器配置使用

SpringBoot 学习笔记心得请求参数处理

SpringBoot 学习笔记心得异常处理机制

SpringBoot入门学习笔记

朗科学习期间心得笔记

Python高级语法——格式化文件——学习心得笔记