SpringBoot实现文件上传

系统页面

在这里插入图片描述

前端表单

想要实现多文件上传 输入框中使用multiple
在这里插入图片描述

后端代码

@Slf4j
@Controller
public class FormTestController {

    /**
     * 文件上传 post表单提交 MultipartFile 自动封装上传过来的文件
     *
     * @param email 邮箱
     * @param username 名字
     * @param headerImg 头像
     * @param photos 生活照(可多选)
     * @return
     */
    @PostMapping("/uploadForm")
    public String uploadForm(@RequestParam("email") String email,
                             @RequestParam("username") String username,
                             @RequestPart("headerImg") MultipartFile headerImg,
                             @RequestPart("photos") MultipartFile[] photos) throws IOException {
        //打印上传信息
        log.info("email={}, username={}, headerImg={}, photos={}",
                  email, username, headerImg.getSize(), photos.length);
        //头像生活照不为空
        if (!headerImg.isEmpty()) {
            String filename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("D://" + filename));
        }
        //生活照不为空
        if (photos.length > 0) {
            for (MultipartFile photo : photos) {
                if (!photo.isEmpty()) {
                    String filename = photo.getOriginalFilename();
                    photo.transferTo(new File("D://" + filename));
                }
            }
        }
        return "main";
    }

}

如文件上传过大,会报错,查看源码MultipartAutoConfigration找到MultipartProperties=发现文件大小默认最大1MB 上传最大大小为10MB

在这里插入图片描述
可通过配置文件对文件大小以及上传大小进行修改

在这里插入图片描述

文件上传源码解析

  • SpringBoot自动配置好了文件上传解析器-StandardServletMultipartResolver
  • 通过断点调试方法 测试文件上传步骤
  • DispathcerServletdoDispatch方法打上断点
    在这里插入图片描述
  • 记录文件上传是否被解析
  • 检测是否为文件上传请求 调用isMultipart方法判断
  • 封装resolveMultipart并返回MutipartHttpServletRequest文件上传请求
  • 参数解析器来解析请求中的文件内容封装成MultipartFile
  • 将request请求的文件信息封装成一个Map

感谢观看~

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值