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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值