カテゴリ: Laravel 更新日: 2025/12/07

Laravelでファイルアップロード付きフォームを実装する方法

Laravelのファイルアップロード付きフォームを実装する方法
Laravelのファイルアップロード付きフォームを実装する方法

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

生徒

「先生、Laravelで画像やファイルをフォームからアップロードしたいんですが、どうやってやるんですか?」

先生

「Laravelではファイルアップロード専用の仕組みがあります。フォーム側の設定とController側の処理を正しく書くことで簡単に実装できます。」

生徒

「フォーム側では何を気をつける必要がありますか?」

先生

「ファイルを送信する場合、フォームにenctype="multipart/form-data"属性を追加する必要があります。これがないとファイルが正しく送信されません。」

1. Bladeテンプレートでフォームを作る

1. Bladeテンプレートでフォームを作る
1. Bladeテンプレートでフォームを作る

Bladeテンプレートでファイルアップロード用のフォームを作る例です。


<form action="{{ route('upload.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <div class="mb-3">
        <label for="title" class="form-label">タイトル</label>
        <input type="text" name="title" class="form-control" id="title" value="{{ old('title') }}">
    </div>
    <div class="mb-3">
        <label for="file" class="form-label">ファイルを選択</label>
        <input type="file" name="file" class="form-control" id="file">
    </div>
    <button type="submit" class="btn btn-primary">アップロード</button>
</form>

ポイントはenctype="multipart/form-data"です。これがないとファイルがサーバーに送信されません。また、@csrfはLaravelのセキュリティ対策で必ず必要です。

2. Controllerでファイルを受け取る

2. Controllerでファイルを受け取る
2. Controllerでファイルを受け取る

ControllerではRequestを使ってファイルを受け取ります。ファイルの保存場所や名前もここで設定できます。


public function store(Request $request)
{
    // バリデーション
    $request->validate([
        'title' => 'required|max:50',
        'file' => 'required|file|mimes:jpg,png,pdf|max:2048'
    ]);

    // ファイルの保存
    if ($request->hasFile('file')) {
        $path = $request->file('file')->store('uploads', 'public');
    }

    // データベース保存など
    // Example: Upload::create(['title' => $request->title, 'path' => $path]);
}

ポイントはhasFile()でファイルが存在するか確認し、store()で指定のディレクトリに保存することです。mimesは許可するファイル形式、maxは最大サイズを指定できます。

3. 保存先と公開設定

3. 保存先と公開設定
3. 保存先と公開設定

上記の例ではpublic/storage/uploadsに保存されます。Laravelではデフォルトでstorage/app/publicに保存され、php artisan storage:linkコマンドを実行するとpublic/storageからアクセスできるようになります。

4. アップロード後のファイル表示

4. アップロード後のファイル表示
4. アップロード後のファイル表示

保存したファイルをBladeで表示するには、保存パスを使います。


<img src="{{ asset('storage/' . $upload->path) }}" alt="アップロード画像" class="img-fluid">

これでユーザーはアップロードしたファイルや画像をブラウザで確認できるようになります。

5. ファイルアップロード付きフォームの注意点

5. ファイルアップロード付きフォームの注意点
5. ファイルアップロード付きフォームの注意点
  • フォームにenctype="multipart/form-data"を必ず設定する
  • ファイル形式とサイズをバリデーションでチェックする
  • 保存先ディレクトリと公開設定を確認する
  • アップロード処理はRequestで受け取り、Controllerで分離して管理する

これらを守ることで、安全で使いやすいファイルアップロードフォームを作ることができます。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド