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