SpringBootファイルをアップロードするサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)
目次
サンプル | ファイルをアップロードする |
コントローラ(FileController.java) | |
フォーム(FileForm.java) | |
画面(index.html) | |
設定ファイル(application.properties) |
ファイルをアップロードする
ファイルをアップロードする流れは、以下のとおりです。
1.画面でファイルを選択しボタンを押すとアップロード処理が始まります。
2.フォームを介してコントローラが指定の場所にファイルを配置します。
http://localhost:8765/でアクセスします。
githubにコードがあります。
https://github.com/ut23405/springboot/tree/master/springboot-fileupload
コントローラ(FileController.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 FileController {
@GetMapping
String index(Model model) {
model.addAttribute("fileForm", new FileForm());
return "/index";
}
@PostMapping("/upload")
String upload(FileForm fileForm) {
MultipartFile mfile = fileForm.getMultipartFile();
String fileName = mfile.getOriginalFilename();
Path filePath = Paths.get("D:/test1/" + fileName);
try {
Files.copy(mfile.getInputStream(), filePath);
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/";
}
}
16行目は、画面の初期表示です。
22行目は、ファイルアップロードするとFileFormに値がセットされます。
25行目のgetMultipartFileは、クライアントの元のファイル名を返します。
26行目は、ファイルの配置先を指定しています。
29行目は、ファイルをcopyメソッドで配置しています。
フォーム(FileForm.java)
package com.example.demo;
import org.springframework.web.multipart.MultipartFile;
public class FileForm {
private MultipartFile mFile;
public MultipartFile getMultipartFile() {
return mFile;
}
public void setMultipartFile(MultipartFile multipartFile) {
this.mFile = multipartFile;
}
}
フォームでアップロードしたファイルを受け取ります。
以下は、MultipartFileのJavaDocです。メソッドがあります。
https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/multipart/MultipartFile.html
画面(index.html)
<!DOCTYPE html>
<html xmlns:th="https://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>upload</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>
enctypeにmultipart/form-dataを指定します。
設定ファイル(application.properties)
server.port = 8765
#spring.servlet.multipart.max-file-size=100KB
spring.servlet.multipart.max-file-size=1MB
multipart.max-file-sizeでアップロードするファイルの最大容量を指定できます。
関連の記事