カテゴリ: Spring 更新日: 2025/10/08

Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定

Spring BootのMultipartFile入門:アップロード/ダウンロードの実装と制限
Spring BootのMultipartFile入門:アップロード/ダウンロードの実装と制限

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

生徒

「Spring Bootでファイルアップロードってどうやるんですか?画像とかExcelとか送れるようにしたいんです」

先生

「Spring BootではMultipartFileを使うことで、簡単にファイルアップロードやダウンロードができます。設定もカスタマイズしやすいんですよ」

生徒

「アップロードのサイズ制限とか、保存先の設定もできるんですか?」

先生

「もちろん可能です!それじゃあ、Spring BootのMultipartFileの基本から実装方法、制限設定まで丁寧に解説していきましょう」

1. MultipartFileとは?Spring Bootで使えるファイルアップロードの仕組み

1. MultipartFileとは?Spring Bootで使えるファイルアップロードの仕組み
1. MultipartFileとは?Spring Bootで使えるファイルアップロードの仕組み

Spring Bootでファイルをアップロードする際は、コントローラーのメソッド引数にMultipartFileを使います。これはSpring Frameworkが提供しているインターフェースで、アップロードされたファイルをメモリまたは一時ファイルとして扱える便利な仕組みです。

アップロード対象のフォームには、enctype="multipart/form-data"を必ず指定し、POSTで送信する必要があります。

2. HTMLのアップロードフォームを作ってみよう

2. HTMLのアップロードフォームを作ってみよう
2. HTMLのアップロードフォームを作ってみよう

まずは、Spring Bootアプリケーション側にファイルを送信するフォームをHTMLで作成します。


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

このようなシンプルなフォームでも、MultipartFileを通してファイルを受け取ることができます。

3. Spring Boot側でアップロード処理を実装する

3. Spring Boot側でアップロード処理を実装する
3. Spring Boot側でアップロード処理を実装する

次に、@Controllerクラスでファイルを受け取る処理を実装します。アップロードされたファイルを特定のディレクトリに保存する簡単な例を見てみましょう。


@Controller
public class FileUploadController {

    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException {
        String uploadDir = "uploads/";
        Path path = Paths.get(uploadDir + file.getOriginalFilename());
        Files.createDirectories(path.getParent());
        Files.write(path, file.getBytes());
        return "uploadSuccess";
    }
}

このコードでは、アップロードされたファイルを指定ディレクトリに保存し、処理が成功すればuploadSuccessというビューを返すようにしています。

4. ダウンロード処理の実装方法

4. ダウンロード処理の実装方法
4. ダウンロード処理の実装方法

アップロードされたファイルをユーザーがダウンロードできるようにするには、Spring MVCのResponseEntityを活用します。


@GetMapping("/download/{filename}")
public ResponseEntity<Resource> downloadFile(@PathVariable String filename) throws IOException {
    Path file = Paths.get("uploads").resolve(filename);
    Resource resource = new UrlResource(file.toUri());

    return ResponseEntity.ok()
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
        .body(resource);
}

このように、ファイル名をパスに含めて取得し、レスポンスに設定することで、任意のファイルをブラウザにダウンロードさせることができます。

5. application.propertiesでアップロードサイズ制限を設定する

5. application.propertiesでアップロードサイズ制限を設定する
5. application.propertiesでアップロードサイズ制限を設定する

Spring Bootでは、application.propertiesに設定を追加することで、アップロード可能な最大サイズを制限できます。


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

max-file-sizeは1つのファイルサイズ、max-request-sizeは複数ファイルを含むリクエスト全体の制限です。適切なサイズに設定することで、不正な大容量ファイルのアップロードを防げます。

6. 複数ファイルのアップロードに対応するには?

6. 複数ファイルのアップロードに対応するには?
6. 複数ファイルのアップロードに対応するには?

MultipartFile[]を使えば複数ファイルのアップロードにも簡単に対応できます。HTML側のinputタグにmultiple属性をつけることを忘れないようにしましょう。


<form method="post" action="/multi-upload" enctype="multipart/form-data">
    <input type="file" name="files" multiple>
    <button type="submit">複数ファイルアップロード</button>
</form>

@PostMapping("/multi-upload")
public String uploadMultipleFiles(@RequestParam("files") MultipartFile[] files) throws IOException {
    for (MultipartFile file : files) {
        Path path = Paths.get("uploads", file.getOriginalFilename());
        Files.createDirectories(path.getParent());
        Files.write(path, file.getBytes());
    }
    return "uploadSuccess";
}

このようにMultipartFile[]で複数のファイルを一括処理することで、ユーザーの利便性が大きく向上します。

7. セキュリティ対策:ファイル拡張子・サイズ・保存先のチェック

7. セキュリティ対策:ファイル拡張子・サイズ・保存先のチェック
7. セキュリティ対策:ファイル拡張子・サイズ・保存先のチェック

ファイルアップロードにはセキュリティリスクも伴います。不正な拡張子や想定外の容量、危険なファイルのアップロードを避けるために、以下のような対策を入れることが重要です。

  • 受け入れる拡張子を限定する(例:.jpg, .png, .pdf
  • 保存先のディレクトリにwebアクセス不可の設定を行う
  • ファイルサイズの上限をapplication.propertiesで制御する
  • ファイル名のサニタイズ(特殊文字の除去)

セキュリティを確保しつつ利便性を保つためには、これらの対策を総合的に取り入れることが求められます。

8. Spring Bootでファイルアップロード機能を作る流れ

8. Spring Bootでファイルアップロード機能を作る流れ
8. Spring Bootでファイルアップロード機能を作る流れ

ここまで、Spring BootでMultipartFileを使ったファイルアップロードとダウンロードの基本、HTMLフォームの作成、Javaコードの実装例、ファイル制限の設定、複数ファイル対応、セキュリティ対策まで幅広く解説しました。

これらを順に理解して実装していくことで、堅牢で安全なファイルアップロード機能を構築できます。

カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス