Thymeleafでファイルアップロード処理を実装

Thymeleafでファイルアップロード処理を実装

Thymeleafでファイルアップロード処理を実装するためのコードを以下に示します。
HTMLのフォームとJavaのフォームクラスを作成します。

HTMLフォーム (upload.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>ファイルアップロード</title>
</head>
<body>
  <h1>ファイルアップロードフォーム</h1>
  <form th:action="@{/upload}" th:object="${uploadForm}" method="post" enctype="multipart/form-data">
    <label for="file">ファイルを選択:</label>
    <input type="file" id="file" name="file" />
    <button type="submit">アップロード</button>
  </form>
</body>
</html>

Javaフォームクラス (UploadForm.java)

import org.springframework.web.multipart.MultipartFile;

public class UploadForm {
  private MultipartFile file;

  public MultipartFile getFile() {
    return file;
  }

  public void setFile(MultipartFile file) {
    this.file = file;
  }
}

このコードはファイルアップロードフォームを作成し、ファイルを選択して送信する機能を提供します。
次に、このフォームを処理するコントローラーを作成します。

コントローラー (UploadController.java)

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.bind.annotation.ModelAttribute;
import org.springframework.web.multipart.MultipartFile;

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 final String UPLOAD_DIR = "uploads/";

  @GetMapping("/upload")
  public String showUploadForm(Model model) {
    model.addAttribute("uploadForm", new UploadForm());
    return "upload";
  }

  @PostMapping("/upload")
  public String handleFileUpload(@ModelAttribute UploadForm uploadForm) {
    MultipartFile file = uploadForm.getFile();

    if (file.isEmpty()) {
      return "redirect:/upload?error";
    }

    try {
      byte[] bytes = file.getBytes();
      Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
      Files.write(path, bytes);
    } catch (IOException e) {
      e.printStackTrace();
      return "redirect:/upload?error";
    }

    return "redirect:/upload?success";
  }
}

このコントローラーは、ファイルアップロードフォームを表示し、ファイルが送信されたときにそのファイルを指定されたディレクトリに保存します。

以上で、Thymeleafを使ったファイルアップロード処理の基本的な実装が完了です。