カテゴリ: Spring 更新日: 2026/02/09

Springの例外処理「MaxUploadSizeExceededException」の対処法を初心者向けに完全解説

ファイル入出力の例外:MaxUploadSizeExceededException 等の対処
ファイル入出力の例外:MaxUploadSizeExceededException 等の対処

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

生徒

「Spring Bootでファイルをアップロードしようとしたら、エラーが出て処理できませんでした。どうしたらいいですか?」

先生

「そのエラーはおそらく、MaxUploadSizeExceededExceptionという例外が発生している可能性がありますね。これはファイルのサイズ制限を超えたときに発生するSpringの例外です。」

生徒

「それって、どこで設定を変えたり、どうやってキャッチしてエラーメッセージを出したりするんですか?」

先生

「とても良いところに気が付きましたね!では、初心者でもわかるように、Spring Bootでのファイルアップロードのサイズ制限の設定と、MaxUploadSizeExceededExceptionの対処方法を丁寧に解説していきましょう。」

1. Spring Bootのファイルアップロードで起きる例外とは?

1. Spring Bootのファイルアップロードで起きる例外とは?
1. Spring Bootのファイルアップロードで起きる例外とは?

Spring Bootでファイルをアップロードする処理を実装する際、大きなファイルを送信するとMaxUploadSizeExceededExceptionという例外が発生することがあります。この例外は、アップロードされたファイルが設定された最大サイズを超えた場合に発生する例外です。

このようなエラーは、画像や動画などの大きなファイルを扱う場合に特に注意が必要です。初心者がつまずきやすいポイントなので、しっかり理解しておきましょう。

2. MaxUploadSizeExceededExceptionが発生する原因

2. <code>MaxUploadSizeExceededException</code>が発生する原因
2. MaxUploadSizeExceededExceptionが発生する原因

MaxUploadSizeExceededExceptionは、Spring Bootでファイルアップロードのサイズが制限を超えたときに自動的にスローされます。たとえば、デフォルトでは1MBまでしか許可されていないことが多く、それを超えるファイルをアップロードすると例外が発生します。

3. アップロードサイズ制限の設定方法(application.properties

3. アップロードサイズ制限の設定方法(<code>application.properties</code>)
3. アップロードサイズ制限の設定方法(application.properties

ファイルサイズの上限は、application.propertiesまたはapplication.ymlで設定できます。以下のように設定すると、ファイルサイズの上限を変更できます。


spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

max-file-sizeは1つのファイルのサイズ上限、max-request-sizeは複数ファイルを含むリクエスト全体の上限です。大きめのファイルを扱いたい場合は、適切に調整しましょう。

4. MaxUploadSizeExceededExceptionをキャッチして丁寧なエラーメッセージを表示する

4. <code>MaxUploadSizeExceededException</code>をキャッチして丁寧なエラーメッセージを表示する
4. MaxUploadSizeExceededExceptionをキャッチして丁寧なエラーメッセージを表示する

Springでは、例外をハンドリングする方法として、@ControllerAdviceを使うのが一般的です。以下のようにMaxUploadSizeExceededExceptionを捕捉して、ユーザーにわかりやすいメッセージを返すことができます。


import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class FileUploadExceptionAdvice extends ResponseEntityExceptionHandler {

    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public String handleMaxSizeException(MaxUploadSizeExceededException exc, RedirectAttributes redirectAttributes) {
        redirectAttributes.addFlashAttribute("message", "アップロードされたファイルサイズが大きすぎます。10MB以下のファイルを選択してください。");
        return "redirect:/uploadPage";
    }
}

このコードを使うことで、ファイルサイズの制限を超えたときに、エラーページにリダイレクトしつつ、フラッシュメッセージとしてエラー内容を表示できます。

5. HTMLフォーム側のファイルアップロード対応

5. HTMLフォーム側のファイルアップロード対応
5. HTMLフォーム側のファイルアップロード対応

HTML側でも、ファイルをアップロードするためのフォームを用意する必要があります。以下のように記述することで、ユーザーがファイルを選択して送信できます。


<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">アップロード</button>
</form>

enctype="multipart/form-data"を忘れると、ファイルが正しく送信されないので注意しましょう。

6. コントローラー側でのファイル受け取り処理

6. コントローラー側でのファイル受け取り処理
6. コントローラー側でのファイル受け取り処理

Spring Bootでは、アップロードされたファイルをMultipartFileとして受け取ります。以下がその一例です。


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@Controller
public class FileUploadController {

    private static final String UPLOAD_DIR = "uploads/";

    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {

        try {
            byte[] bytes = file.getBytes();
            Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
            Files.write(path, bytes);

            redirectAttributes.addFlashAttribute("message",
                "ファイル '" + file.getOriginalFilename() + "' のアップロードに成功しました!");
        } catch (IOException e) {
            redirectAttributes.addFlashAttribute("message",
                "ファイルの保存中にエラーが発生しました。");
        }

        return "redirect:/uploadPage";
    }
}

このコードで、アップロードされたファイルを指定したディレクトリに保存し、結果に応じてフラッシュメッセージを表示します。

7. 実行結果の例

7. 実行結果の例
7. 実行結果の例

正常にファイルがアップロードされた場合と、サイズ制限を超えた場合の出力例は以下のとおりです。

成功時の出力例:


ファイル 'example.jpg' のアップロードに成功しました!

サイズ制限超過時の出力例:


アップロードされたファイルサイズが大きすぎます。10MB以下のファイルを選択してください。

8. ファイルサイズ制限以外の例外にも備えよう

8. ファイルサイズ制限以外の例外にも備えよう
8. ファイルサイズ制限以外の例外にも備えよう

IOExceptionIllegalStateExceptionなど、ファイルアップロードでは他にもさまざまな例外が発生する可能性があります。それぞれに対して適切な例外処理を記述することで、アプリケーションの信頼性を高めることができます。

9. Spring Bootで使えるその他の便利なプロパティ

9. Spring Bootで使えるその他の便利なプロパティ
9. Spring Bootで使えるその他の便利なプロパティ

以下のようなプロパティも設定可能です:


spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=/tmp
spring.servlet.multipart.file-size-threshold=2MB

一時ファイルの保存先や、ファイルサイズのしきい値なども変更できるので、用途に応じてカスタマイズしましょう。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説