SpringBoot 2.6にファイルをアップロードする

環境
Windows10 64bit
Spring Boot 2.6.3
Spring Tool Suite 4
JavaSE 11
Thymeleaf 3

操作方法
1.ファイルアップロードフォームの定義

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
}
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; } }
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を指定します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<!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>
<!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>
<!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)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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/";
}
}
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/"; } }
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