カテゴリ: Laravel 更新日: 2026/03/25

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で分離して管理する

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

まとめ

まとめ
まとめ

Laravelでのファイルアップロード処理の全体像を振り返る

Laravelでファイルアップロード付きフォームを実装する場合は、フォームの設定、Controllerでの受け取り処理、保存先の管理、そしてアップロードしたファイルの表示という流れを理解しておくことが重要です。LaravelはWebアプリケーション開発を効率化するフレームワークとして多くの開発現場で利用されており、ファイルアップロード機能も非常にシンプルな記述で実装できます。

まず最初に重要なのが、Bladeテンプレートで作成するフォームの設定です。通常のフォーム送信と違い、ファイルをサーバーに送信する場合はフォームにmultipart形式を指定する必要があります。これを設定しないと、ファイルはブラウザからサーバーへ送信されません。Laravelのフォームでもこの設定は基本中の基本であり、初心者がつまずきやすいポイントでもあります。


<form action="{{ route('upload.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="file">
</form>

このようにenctype属性を設定することで、ブラウザはファイルデータを含めたリクエストを送信できるようになります。また、Laravelではセキュリティ対策としてCSRFトークンが必須となるため、Bladeテンプレートでは必ずcsrfディレクティブを記述する必要があります。

Controllerでのファイル受け取りと保存処理

フォームから送信されたファイルはControllerで受け取ります。Laravelでは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');
    }
}

hasFileメソッドでファイルが存在するか確認し、fileメソッドでファイルを取得します。その後storeメソッドを使用することで、指定したディレクトリに自動でファイルを保存できます。Laravelではストレージ機能が標準で用意されているため、面倒なファイル操作を書く必要がありません。

Laravelストレージと公開ディレクトリの関係

Laravelではファイルは基本的にstorageディレクトリ内に保存されます。しかし、このままではブラウザから直接アクセスできません。そこで使用するのがストレージリンクです。コマンドを一度実行するだけで、公開ディレクトリからファイルを参照できるようになります。


php artisan storage:link

このコマンドを実行すると、publicディレクトリ内にstorageリンクが作成され、storage内のファイルをブラウザから読み込めるようになります。Laravelのファイルアップロードではこの設定がとても重要で、画像表示やダウンロード処理を実装する際には必ず必要になる作業です。

アップロードした画像やファイルの表示方法

保存したファイルはBladeテンプレートから簡単に表示できます。保存されたパスを利用してasset関数を使えば、画像やファイルを画面に表示することができます。Laravelではこの方法が一般的に使われています。


<img src="{{ asset('storage/' . $upload->path) }}" class="img-fluid">

このように書くことで、ユーザーがアップロードした画像やファイルをブラウザに表示できます。ブログシステム、プロフィール画像、商品画像、資料アップロードなど、多くのWebアプリケーションで利用される重要な機能です。

Laravelファイルアップロード実装の重要ポイント

Laravelで安全なファイルアップロード機能を作るためには、いくつかの重要なポイントがあります。まずフォームではmultipart形式を指定すること、Controllerではバリデーションを必ず行うこと、保存先ディレクトリの管理を行うこと、そしてストレージリンクを作成してブラウザからアクセスできるようにすることです。

また、実際のWebアプリケーションではファイル名の重複対策やセキュリティ対策も考慮する必要があります。Laravelではstoreメソッドを使うことで自動的にユニークなファイル名を生成してくれるため、ファイル名の衝突を防ぐことができます。この仕組みを理解しておくと、画像投稿サイトやファイル管理システムなどの開発にも応用できるようになります。

Laravelのファイルアップロード機能は、Bladeテンプレート、Controller、Request、ストレージ機能など、フレームワークの主要機能を組み合わせて実装する仕組みになっています。これらを一度理解しておくと、画像投稿機能、プロフィール画像アップロード、資料共有システム、ECサイトの商品画像管理など、さまざまなWebサービス開発に応用できます。実務のLaravel開発でも非常によく使われる技術なので、今回の流れをしっかり理解しておくと今後の開発に大きく役立つでしょう。

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

生徒

先生、Laravelでファイルアップロードを実装する流れがだいぶ分かってきました。まずフォーム側で設定する必要があるんですよね。

先生

そうですね。特に重要なのはフォームのmultipart設定です。これを設定しないとファイルはサーバーへ送信されません。

生徒

フォームの次はControllerで処理するんですよね。Requestを使ってファイルを取得して保存する流れでした。

先生

その通りです。LaravelではhasFileでファイルの存在を確認し、storeメソッドで保存できます。コードもシンプルなので覚えやすいですね。

生徒

保存したファイルをブラウザで表示するためにはストレージリンクを作る必要がありましたよね。

先生

はい。storageリンクを作ることでpublicディレクトリからファイルを参照できるようになります。Laravel開発ではよく使う設定なので覚えておくと便利ですよ。

生徒

なるほど。フォーム設定、Controller処理、ストレージ設定、ファイル表示の流れを理解すればLaravelでファイルアップロード機能を作れるんですね。

先生

その通りです。LaravelのファイルアップロードはWebアプリ開発でよく使われる重要な機能です。今回の内容を理解しておけば、画像投稿機能やファイル管理機能など、さまざまなシステム開発に応用できるようになります。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Laravelのフォームで画像ファイルをアップロードする際、HTMLのformタグに記述すべき必須の属性は何ですか?

Laravelでファイル送信を行う場合、formタグに enctype="multipart/form-data" という属性を必ず記述する必要があります。この属性を指定しないと、ブラウザはファイルの中身をバイナリデータとしてサーバーに送信せず、ファイル名などのテキスト情報しか送られません。画像アップロード機能が動かない原因の多くはこの記述漏れによるものです。
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.6
Java&Spring記事人気No6
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.7
Java&Spring記事人気No7
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.8
Java&Spring記事人気No8
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門