Thymeleafでmultipart/form-dataを使用した実装
Thymeleafでmultipart/form-dataを使用してファイルをアップロードする方法について、以下にソースコードの例を示します。
ここでは、ファイルアップロードを扱うために必要なコントローラの処理とバリデーションも含めています。
1. HTMLテンプレート (upload.html)
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>ファイルアップロード</title> </head> <body> <h1>ファイルアップロードフォーム</h1> <form th:action="@{/upload}" method="post" enctype="multipart/form-data" th:object="${uploadForm}"> <label for="file">ファイル:</label> <input type="file" id="file" name="file" th:field="*{file}" /> <div th:if="${#fields.hasErrors('file')}" th:errors="*{file}">ファイルエラー</div> <button type="submit">アップロード</button> </form> </body> </html>
2. コントローラクラス (FileUploadController.java)
import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import javax.validation.Valid; import org.springframework.validation.annotation.Validated; @Controller @RequestMapping("/upload") public class FileUploadController { @RequestMapping public String showForm(UploadForm uploadForm) { return "upload"; } @PostMapping public String handleFileUpload( @Valid @RequestPart("file") MultipartFile file, BindingResult result, RedirectAttributes redirectAttributes) { if (result.hasErrors()) { return "upload"; } // ファイルの処理 String fileName = file.getOriginalFilename(); // ここにファイル保存処理を追加 redirectAttributes.addFlashAttribute("message", "ファイルアップロード成功: " + fileName); return "redirect:/upload"; } }
3. フォームクラス (UploadForm.java)
import org.springframework.web.multipart.MultipartFile; import javax.validation.constraints.NotNull; public class UploadForm { @NotNull(message = "ファイルは必須です") private MultipartFile file; public MultipartFile getFile() { return file; } public void setFile(MultipartFile file) { this.file = file; } }
バリデーション
- @NotNull アノテーションを使用して、ファイルが必須であることを示します。
- BindingResult を用いて、ファイルアップロード時にエラーが発生した場合にはエラーメッセージを表示します。
このコード例では、multipart/form-data を使用してファイルアップロードを処理する基本的な構成を示しています。
フォームにファイルを選択し、アップロードボタンを押すことでファイルがサーバーに送信され、コントローラで処理されます。
ファイルの保存処理や追加のバリデーションが必要に応じて追加できます。