需要注意的几个点:

  • 文件名重名,防止覆盖(文中样例没有实现)
  • 上传文件类型限定(文中样例没有实现)
  • 写入权限判断或异常处理(文中样例没有实现)

表单

  1. <form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data">
  2. <div class="form-group">
  3. <label for="exampleInputEmail1">邮箱</label>
  4. <input type="email" class="form-control" name="email" id="exampleInputEmail1"
  5. placeholder="Enter email">
  6. </div>
  7. <div class="form-group">
  8. <label for="exampleInputPassword1">姓名</label>
  9. <input type="text" class="form-control" name="username" id="exampleInputPassword1"
  10. placeholder="姓名">
  11. </div>
  12. <div class="form-group">
  13. <label for="exampleInputHeaderImg">头像</label>
  14. <input type="file" name="headerImg" id="exampleInputHeaderImg">
  15. <p class="help-block">请选择一个图片作为头像</p>
  16. </div>
  17. <div class="form-group">
  18. <label for="exampleInputPhotos">相册</label>
  19. <input type="file" name="photos" id="exampleInputPhotos" multiple>
  20. <p class="help-block">请选择多个图片作为相册</p>
  21. </div>
  22. <div class="checkbox">
  23. <label>
  24. <input type="checkbox"> Check me out
  25. </label>
  26. </div>
  27. <button type="submit" class="btn btn-primary">提交</button>
  28. </form>

控制器

  1. @PostMapping(path = "/upload")
  2. public String upload(@RequestParam("email") String email,
  3. @RequestParam("username") String username,
  4. @RequestParam("headerImg") MultipartFile headerImg,
  5. @RequestParam("photos") MultipartFile[] photos) throws IOException {
  6. log.info("上传的信息:email={}, username={}, headerImg={}, photos={}",
  7. email, username, headerImg.getSize(), photos.length);
  8. // 文件重命名
  9. // 保存到文件服务器,OSS服务器,或本地磁盘
  10. if (!headerImg.isEmpty()) {
  11. // 获取文件名
  12. String originalFileName = headerImg.getOriginalFilename();
  13. // 写入目标路径
  14. headerImg.transferTo(new File("D:\\upload\\" + originalFileName));
  15. }
  16. if (photos.length > 0) {
  17. for (MultipartFile photo : photos) {
  18. if (!photo.isEmpty()) {
  19. // 获取文件名
  20. String originalFileName = photo.getOriginalFilename();
  21. // 写入目标路径
  22. photo.transferTo(new File("D:\\upload\\" + originalFileName));
  23. }
  24. }
  25. }
  26. return "index.html";
  27. }

上传文件大小限制

  1. spring:
  2. servlet:
  3. multipart:
  4. max-file-size: 10MB
  5. max-request-size: 100MB