二、SpringBoot2核心功能--02web开发-18文件上传

1、前端页面表单代码

<form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputEmail1">邮箱</label>
        <input type="email" name="email" class="form-control" id="exampleInputEmail1"
               placeholder="Enter email">
    </div>
    <div class="form-group">
        <label for="exampleInputPassword1">姓名</label>
        <input type="text" name="username" class="form-control" id="exampleInputPassword1" 
        placeholder="username">
    </div>
    <div class="form-group">
        <label for="exampleInputFile">头像</label>
        <input type="file" name="headerImg" id="exampleInputFile">
    </div>
    <div class="form-group">
        <label for="exampleInputFile">生活照</label>
        <input type="file" name="photos" multiple>
    </div>
    <div class="checkbox">
        <label><input type="checkbox"> Check me out</label>
    </div>
    <button type="submit" class="btn btn-primary">提交</button>
</form>

在这里插入图片描述

2、后台控制层代码

@RequestParam和@RequestPart 的区别:

  • 1.@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。
  • 2.支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。
  • 3.@RequestParam也同样支持multipart/form-data请求。
  • 4.他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。
  • 5.@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)。

在这里插入图片描述

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;


@Slf4j
@Controller
public class FormTestController {

    @GetMapping("/form_layouts")
    public String form_layouts(){
        return "form/form_layouts";
    }

    @PostMapping("/upload")
    public String upload(@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,photos);
        //上传单个文件
        if(!headerImg.isEmpty()){
            //将数据保存到文件服务器
            String originalFilename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("E:\\"+originalFilename));
        }
        //同时上传多个文件
        if(photos.length>0){//判断photots是否为空
            for(MultipartFile photo : photos){//photos中存在文件,遍历photos中的每一个文件photo
                if(!photo.isEmpty()){//判断photo是否为空
                    String originalFilename = photo.getOriginalFilename();//如果photo有值,获取文件名
                    //将上传的文件保存到目标路径下
                    photo.transferTo(new File("E:\\cache\\" + originalFilename));
                }
            }
        }
        return "main";
    }

}

3、修改默认的文件上传大小

找到MultipartAutoConfiguration类中的MultipartProperties属性配置类
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

# 设置单个上传文件大小
spring.servlet.multipart.max-file-size=5MB
# 设置上传文件的大小
spring.servlet.multipart.max-request-size=20MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值