20.文件上传功能
示例:
1.页面代码如下:
重点1: enctype="multipart/form-data"是必须的,且是固定写法
<form action="/upload" method="post" enctype="multipart/form-data">
<div>
<label for="email">邮箱</label>
<input type="email" name="email" id="email">
</div>
<div>
<label for="username">名字</label>
<input type="text" name="username" id="username">
</div>
<!--单选-->
重点1:上传单个文件
<div>
<label for="headerImage">头像</label>
<input type="file" name="headerImage" id="headerImage">
</div>
<!--多选-->
重点2:加个multiple可以同时选择多个文件上传
<div>
<label for="lifeImages"></label>
<input type="file" name="lifeImages" id="lifeImages" multiple>
</div>
<input type="submit" value="提交">
</form>
2.控制类代码:
//页面请求路径
@GetMapping("/getForm")
public String getForm(){
log.info("获取上传页面");
return "/form/form_layouts";
}
//文件上传路径
@PostMapping("/upload")
public String uploadFile(@RequestParam("email") String email,
@RequestParam("username") String username,
重点3:使用MultipartFile接受文件上传数据,并且标签是@RequestPart
@RequestPart("headerImage") MultipartFile headImg,
@RequestPart("lifeImages") MultipartFile[] lifeImages) throws IOException {
log.info("前台传来的email{},username{},headerImage{},lifeImages{}",
email,username,headImg.getSize(),lifeImages.length);
重点4:判断文件上传数据是否为空
if (!headImg.isEmpty()){
重点5://获取文件的原始名字
String name=headImg.getOriginalFilename();
重点6://将文件保存到指定路径,并指定名称
headImg.transferTo(new File("C:\\Users\\Administrator\\Desktop\\"+name));
}
if (lifeImages.length>0){
for (MultipartFile lifeImage : lifeImages) {
if (!lifeImage.isEmpty()){
String name=lifeImage.getOriginalFilename();
lifeImage.transferTo(new File("C:\\Users\\Administrator\\Desktop\\"+name));
}
}
}
//上传成功
log.info("上传成功,返回到main页面..");
return "main";
}
3.文件上传的自动配置类为:MultipartAutoConfiguration,配置类为:MultipartProperties
里面指定了单个文件上传最大为1MB,多个文件上传总大小不能超过10MB
所以在springboot配置文件中需要更改下:
重点7:指定单次上传的文件大小
spring.servlet.multipart.max-file-size=100MB
重点8:指定多文件上传的总大小
spring.servlet.multipart.max-request-size=1000MB
要不会因为文件上传大小限制导致异常!!!