核心控制器
package com.neo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class UploadController {
//上传路径
private static String UPLOADED_FOLDER = "D:/upload/";
//单文件上传页面
@GetMapping("/")
public String index() {
return "upload";
}
//多文件上传页面
@GetMapping("/more")
public String uploadMore() {
return "uploadMore";
}
//单文件上传接口
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "redirect:uploadStatus";
}
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/uploadStatus";
}
//多文件上传接口
@PostMapping("/uploadMore")
public String moreFileUpload(@RequestParam("file") MultipartFile[] files,
RedirectAttributes redirectAttributes) {
if (files.length==0) {
redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
return "redirect:uploadStatus";
}
for(MultipartFile file:files){
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
redirectAttributes.addFlashAttribute("message", "You successfully uploaded all");
return "redirect:/uploadStatus";
}
//文件上传成功页面
@GetMapping("/uploadStatus")
public String uploadStatus() {
return "uploadStatus";
}
}
配置application.properties
#http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
#search multipart
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
其他相关配置:
- spring.servlet.multipart.enabled=true,是否⽀持 multipart 上传⽂件
- spring.servlet.multipart.file-size-threshold=0,⽀持⽂件写⼊磁盘
- spring.servlet.multipart.location=,上传⽂件的临时⽬录
- spring.servlet.multipart.max-file-size=10Mb,最⼤⽀持⽂件⼤⼩
- spring.servlet.multipart.max-request-sizee=10Mb,最⼤⽀持请求⼤⼩
-
spring.servlet.multipart.resolve-lazily=false,是否⽀持 multipart 上传⽂件时懒加载
单文件上传表单
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" /><br/><br/>
<input type="submit" value="Submit" />
</form>
多文件上传表单
<form method="POST" action="/uploadMore" enctype="multipart/form-data">
文件1: <input type="file" name="file" /><br/><br/>
文件2: <input type="file" name="file" /><br/><br/>
文件3: <input type="file" name="file" /><br/><br/>
<input type="submit" value="Submit" />
</form>