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

Spring Boot

Posted by arkgame