准备的依赖
在springboot项目下加入springmvc和thymeleaf
前端准备
两个页面,一个upload.html(用于上传),一个uploadStatus.html(上传后的返送信息)
upload.html:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br>
<button type="submit">submit</button>
</form>
uploadStatus.html:
<div th:if="${message}">
<h2 th:text="${message}"/>
</div>
后台控制器UploadController:
@Controller
public class UploadController {
private static String UPLOADED_FLODER = "E://temp//";
@GetMapping("/")
public String index(){
return "upload";
}
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes){
System.out.println(file.getOriginalFilename()); //文件名
if(file.isEmpty()){ //No Selected File for Illegal Operation
redirectAttributes.addFlashAttribute("message","please select a file to upload~");
return "redirect:uploadStatus";
}
try {
//Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FLODER + file.getOriginalFilename());
Files.write(path,bytes);
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded '"+file.getOriginalFilename()+"'");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/uploadStatus";
}
@GetMapping("/uploadStatus")
public String uploadStatus(){
return "uploadStatus";
}
}
上传过程难免也会存在异常,比如文件大小不符合要求(可以全局异常处理跳转)、
@ControllerAdvice
public class GlobalExceptionHandler {
//上传文件异常处理
@ExceptionHandler(MultipartException.class)
public String handleError1(MultipartException e, RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("message", e.getCause().getMessage());
return "redirect:/uploadStatus";
}
}
补充:
spring.servlet.multipart.max-file-size=10MB //单文件大小
spring.servlet.multipart.max-request-size=10MB //多文件大小