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