Spring MVC(+ Spring Boot) におけるファイルアップロード
必要な設定とMultipartFileの動きのまとめ。
Java | Java SE 8 |
設定
サーバーの設定
ファイルのアップロードを行う場合、通常JavaEEサーバーの制限が設定されている(Webサーバーも)ので見直しをする。特にバイト数制限の修正が必要。
組み込みサーバーを利用するSpring Bootの場合は、プロパティファイルからその設定を変更できる。
spring:
http:
multipart:
max-file-size: 1MB
max-request-size: 10MB
設定項目 | 内容 |
---|---|
max-file-size |
1ファイルにおける最大バイト数 |
max-request-size |
(複数アップロード時の)1リクエストにおける最大バイト数 |
Webのコントローラとフォームの設定
「org.springframework.web.multipart.MultipartFile」というインタフェースでアップロードしたファイルを受け取る。
@Data
public class FileUploadSampleForm implements Serializable {
private MultipartFile uploadedFile;
}
コントローラはPOSTで受け取る。
@PostMapping("/upload") String upload(FileUploadSampleForm fileUploadSampleForm) {
//…
}
HTMLフォームの設定
「enctype="multipart/form-data"」を忘れないようにする。これを設定しないと(HTML仕様上)ファイルの中身が送信されない。
<form action="#" th:action="@{./upload}" method="post" enctype="multipart/form-data" th:object="${form}">
<input type="file" th:field="*{uploadedFile}" />
<button type="submit">送信</button>
</form>
MultipartFileの状態
HTMLフォーム上の操作状況によって、MultipartFileオブジェクトは次のようになる。
状況 | MultipartFile オブジェクト |
getSize() | getOriginalFilename() |
---|---|---|---|
HTML上のアップロードフィールドが |
null |
- |
- |
(アップロードフィールドは準備されたが) |
生成 |
0(バイト) |
""(空文字) |
0バイトのファイルがアップロードされた |
生成 |
0(バイト) |
アップロードファイルのファイル名 |
通常のファイルがアップロードされた |
生成 |
アップロードファイルのバイト数 |
アップロードファイルのファイル名 |
MultipartFile

MultipartFileはSpringにおけるファイルアップロードなどの受け取りに利用するインタフェース。
メソッド | 概要 |
---|---|
isEmpty() |
ファイルが空(0バイト)の場合true。 |
getSize() |
ファイルサイズ(バイト数)。 |
getName() |
フォームにおけるname。 |
getOriginalFilename() |
アップロードファイルのファイル名。 |
getBytes() |
アップロードファイルをbyte配列で取得。 |
getInputStream() |
アップロードファイルのInputStreamを取得。 |
transferTo(File dest) |
アップロードファイルを指定ファイルに転送する。 |
Appendix A: 参考
Appendix B: 改訂履歴
-
v1.0, 2016-08-12: 初稿