SpringBoot 2.6にファイルをアップロードする
環境
Windows10 64bit
Spring Boot 2.6.3
Spring Tool Suite 4
JavaSE 11
Thymeleaf 3
操作方法
1.ファイルアップロードフォームの定義
package com.example.demo; import org.springframework.web.multipart.MultipartFile; //ファイルアップロードフォームの定義 public class FileMultiForm { // MultipartFile型変数の宣言 private MultipartFile multipartFile; public MultipartFile getMultipartFile() { return multipartFile; } public void setMultipartFile(MultipartFile multipartFile) { this.multipartFile = multipartFile; } }
2.「templates\index.html」の定義
enctypeにmultipart/form-dataを指定します
<!DOCTYPE html> <html xmlns:th="https://thymeleaf.org"> <head> <meta charset="UTF-8"> <title>ファイルのアップロード</title> </head> <body> <form method="post" th:action="@{/upload}" enctype="multipart/form-data" th:object="${fileForm}"> <p><input type="file" th:field="*{multipartFile}"></p> <p><input type="submit" value="アップロード"></p> </form> </body> </html>
3.コントローラ側の定義(FileUploadController.java)
package com.example.demo; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.multipart.MultipartFile; @Controller public class FileUploadController { // アップロードパス名 public static final String UPLOAD_PATH = "C:/study/springboot/upload/"; @GetMapping("/upload") String funA(Model model) { model.addAttribute("fileForm", new FileMultiForm()); return "/upload/index"; } // ファイルアップロードするとFileFormに値がセットされます @PostMapping("/upload") String funB(FileMultiForm fileForm) { MultipartFile multipartFile = fileForm.getMultipartFile(); // クライアントの元のファイル名を返す String fileName = multipartFile.getOriginalFilename(); // ファイルの配置先を指定 Path filePath = Paths.get(UPLOAD_PATH + fileName); try { // ファイルをcopyメソッド Files.copy(multipartFile.getInputStream(), filePath); } catch (IOException e) { e.printStackTrace(); } return "redirect:/upload/"; } }
4.アップロードファイルの制限を指定します。
ファイル名:application.properties
spring.servlet.multipart.max-file-size=10MB