カテゴリ: Spring 更新日: 2026/01/09
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Spring MVCでファイルアップロードを実装!MultipartResolverの設定と使い方

Spring MVCのファイルアップロード:MultipartResolver の設定と実装
Spring MVCのファイルアップロード:MultipartResolver の設定と実装

先生と生徒の会話形式で理解しよう

生徒

「Spring MVCでファイルアップロードをやりたいんですが、どうやればいいですか?画像とかPDFをアップできるようにしたいんですけど…」

先生

「Spring MVCでは、MultipartResolverという仕組みを使えば簡単にファイルアップロードを実装できますよ。」

生徒

「設定とか必要ですか?ファイルサイズの制限とかもできるんですか?」

先生

「できます。設定方法やコントローラの記述まで順番に説明していきましょう。」

1. Spring MVCでのファイルアップロードの基本

1. Spring MVCでのファイルアップロードの基本
1. Spring MVCでのファイルアップロードの基本

Spring MVCでは、HTMLフォームからファイルをアップロードする機能を簡単に実現できます。仕組みとしては、multipart/form-data形式で送信されたリクエストをMultipartFileとして受け取り、コントローラで処理するという流れです。

ただし、ファイルアップロードを有効にするには、MultipartResolverの設定が必要です。Spring Bootを使っている場合は、自動で有効になりますが、細かく制御したい場合は明示的に設定を追加します。

2. HTML側のフォームの書き方

2. HTML側のフォームの書き方
2. HTML側のフォームの書き方

ファイルアップロード用のHTMLフォームは、enctype="multipart/form-data"を指定し、<input type="file">を使います。


<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <input type="file" name="file" class="form-control mb-2" />
    <button type="submit" class="btn btn-primary">アップロード</button>
</form>

ここでは、Thymeleafを使った例ですが、通常のHTMLフォームでも同じ構成で動作します。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. コントローラでの受け取り方

3. コントローラでの受け取り方
3. コントローラでの受け取り方

Spring MVCのコントローラでは、MultipartFileを引数にするだけで、アップロードされたファイルを受け取れます。ファイル名やサイズの取得、保存なども簡単です。


@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
    if (!file.isEmpty()) {
        String filename = file.getOriginalFilename();
        Path path = Paths.get("uploads/" + filename);
        Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
    }
    return "upload-result";
}

このように、ファイルの保存処理も数行で書けてしまいます。uploadsフォルダはあらかじめ作成しておきましょう。

4. MultipartResolverの設定(Spring Bootの場合)

4. MultipartResolverの設定(Spring Bootの場合)
4. MultipartResolverの設定(Spring Bootの場合)

Spring Bootでは、spring-boot-starter-webを使っていれば自動的にMultipartResolverが有効になります。ただし、application.propertiesで制限や保存先などを細かく設定できます。


spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
spring.servlet.multipart.location=uploads/

この設定を行えば、10MB以上のファイルはアップロードできないよう制限できます。セキュリティやサーバ負荷対策としても重要です。

5. Spring MVCでのMultipartResolverの明示的なBean定義

5. Spring MVCでのMultipartResolverの明示的なBean定義
5. Spring MVCでのMultipartResolverの明示的なBean定義

Spring Bootを使わず、Spring MVCのみを使っている場合は、MultipartResolverを明示的に@Bean定義する必要があります。


@Bean
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(10485760); // 10MB
    return resolver;
}

この設定を@Configurationクラスに記述しておけば、アップロード処理が有効になります。

6. アップロード結果の確認と出力例

6. アップロード結果の確認と出力例
6. アップロード結果の確認と出力例

ファイルのアップロードが成功した場合は、結果画面でファイル名などを表示できます。以下はコントローラからModelを使って渡す例です。


@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file, Model model) throws IOException {
    if (!file.isEmpty()) {
        String filename = file.getOriginalFilename();
        Path path = Paths.get("uploads/" + filename);
        Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
        model.addAttribute("filename", filename);
    }
    return "upload-result";
}

<p th:text="'アップロードされたファイル名: ' + ${filename}"></p>

7. アップロード可能な拡張子を制限したい場合

7. アップロード可能な拡張子を制限したい場合
7. アップロード可能な拡張子を制限したい場合

セキュリティ対策として、アップロードできるファイルの種類を限定するのはとても重要です。MultipartFile#getContentType()を使えば、拡張子やMIMEタイプをチェックできます。


String contentType = file.getContentType();
if (!contentType.equals("image/png") && !contentType.equals("image/jpeg")) {
    throw new IllegalArgumentException("画像ファイル(png/jpg)以外はアップロードできません");
}

このような制限を設けることで、不要なファイルのアップロードや、セキュリティリスクを減らせます。

8. Spring Securityとファイルアップロードの連携

8. Spring Securityとファイルアップロードの連携
8. Spring Securityとファイルアップロードの連携

アプリケーションによっては、ログインしていないユーザーにファイルアップロードを許可したくない場合もあります。その場合、Spring Securityの設定でパス制御を加えることができます。


http
    .authorizeHttpRequests(auth -> auth
        .requestMatchers("/upload").authenticated()
        .anyRequest().permitAll()
    );

この設定により、ファイルアップロードエンドポイントはログインユーザーのみに制限できます。セキュリティ強化に効果的です。

まとめ

まとめ
まとめ

Spring MVCでのファイルアップロード全体の振り返り

この記事では、Spring MVCにおけるファイルアップロードの基本から、MultipartResolverの役割、HTMLフォームの書き方、コントローラでの受け取り方、ファイル保存処理、サイズ制限や拡張子チェック、さらにはSpring Securityと組み合わせた制御方法まで、一連の流れを丁寧に確認してきました。 ファイルアップロードは、画像投稿、PDF送信、申請書アップロードなど、多くのWebアプリケーションで欠かせない機能です。その一方で、実装を誤るとセキュリティリスクやサーバ負荷の原因にもなります。

Spring MVCでは、multipart/form-data形式のリクエストをMultipartFileとして自然に扱えるため、初心者でも比較的スムーズに実装できます。 特にSpring Bootを利用している場合は、MultipartResolverが自動設定される点が大きな利点です。これにより、設定に悩まずコントローラの実装に集中できます。 一方で、ファイルサイズ制限や保存先の指定、アップロード有効化などは、application.propertiesapplication.ymlで明示的に管理することが重要です。

MultipartResolverとMultipartFileの理解が重要

ファイルアップロード処理の中核となるのがMultipartResolverです。この仕組みがあることで、HTTPリクエスト内のファイルデータを分解し、Spring MVCが扱いやすい形に変換してくれます。 その結果、コントローラ側ではMultipartFileを受け取るだけで、ファイル名、サイズ、Content-Type、InputStreamなどを簡単に取得できます。 実務では、アップロード直後に保存するだけでなく、ウイルスチェックや画像リサイズ、データベース登録などの処理と組み合わせることも多いため、この基本構造を理解しておくことがとても大切です。

また、Spring Bootを使わないSpring MVC構成では、CommonsMultipartResolverなどを@Bean定義する必要がある点も押さえておくべきポイントです。 プロジェクト構成や使用フレームワークによって設定方法が変わるため、自分の環境に合った実装を選択できるようにしておくと安心です。

安全なファイルアップロードのための基本対策

ファイルアップロード機能では、セキュリティ対策が非常に重要になります。 記事内で紹介したように、ファイルサイズ制限を設けること、拡張子やMIMEタイプをチェックすること、保存先ディレクトリを固定することは基本中の基本です。 これらを怠ると、不正ファイルのアップロードやディスク枯渇、想定外の動作につながる可能性があります。

さらに、Spring Securityと連携することで、ログインユーザーのみにアップロードを許可したり、管理者専用のアップロード画面を用意したりすることも可能です。 ファイルアップロードは便利な反面、攻撃対象になりやすい機能でもあるため、認証・認可とセットで設計する意識が重要になります。

基本構成のサンプルおさらい

ここで、Spring MVCでファイルアップロードを行う際の最小構成を改めて整理しておきましょう。 HTMLフォーム、コントローラ、設定が正しくそろっていれば、安定したアップロード処理が実現できます。


@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
    if (!file.isEmpty()) {
        Path path = Paths.get("uploads/" + file.getOriginalFilename());
        Files.copy(file.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING);
    }
    return "result";
}

このようなシンプルな実装から始め、必要に応じてバリデーションやセキュリティ対策を追加していくのが、無理のない進め方です。 基本をしっかり理解しておくことで、機能追加や仕様変更にも柔軟に対応できるようになります。

先生と生徒の振り返り会話

生徒

「Spring MVCのファイルアップロードって、思っていたより仕組みが分かりやすいですね。 MultipartFileを受け取るだけで、いろいろな情報が扱えるのが便利だと感じました。」

先生

「そうですね。最初は難しく見えますが、流れを理解すれば怖くありません。 特にMultipartResolverの役割を知っておくと、全体像がつかみやすくなります。」

生徒

「サイズ制限や拡張子チェック、Spring Securityとの連携も大事なんですね。 ただアップできればいい、というわけではないと分かりました。」

先生

「その気付きはとても大切です。ファイルアップロードは便利な機能だからこそ、 安全性や運用を意識して実装することが重要です。 ぜひ今回学んだ内容を、実際のアプリケーションでも活かしてみてください。」

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門