カテゴリ: Laravel 更新日: 2026/04/27

Laravelでファイルアップロードする方法を完全解説!初心者でもわかるフォームから保存まで

Laravelでファイルをアップロードする方法(フォーム→保存)
Laravelでファイルをアップロードする方法(フォーム→保存)

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

生徒

「Laravelで画像やファイルをアップロードするにはどうすればいいですか?」

先生

「Laravelではフォームを使ってファイルを送信し、サーバーに保存することができます。」

生徒

「フォームから送ったファイルはどうやって保存されるんですか?」

先生

「コントローラという仕組みを使って受け取り、ストレージに保存します。それでは順番に見ていきましょう!」

1. Laravelのファイルアップロードとは?

1. Laravelのファイルアップロードとは?
1. Laravelのファイルアップロードとは?

Laravelのファイルアップロードとは、ユーザーがブラウザ上で選択した画像やPDFなどのファイルをサーバーに送信し、保存する仕組みのことです。例えば、プロフィール画像の登録や、資料のアップロードなどで使われます。

初心者の方は難しく感じるかもしれませんが、実際は「フォームで送る」「サーバーで受け取る」「保存する」という3つの流れだけです。この流れを理解すれば、Laravelのファイル操作はとてもシンプルです。

2. ファイルアップロード用フォームの作成

2. ファイルアップロード用フォームの作成
2. ファイルアップロード用フォームの作成

まずは、ファイルを送信するためのHTMLフォームを作ります。ここで重要なのが、enctypeという属性です。これは「ファイルを送る形式」を指定するものです。


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

fileという入力欄が、ファイル選択のボタンになります。ユーザーはここからパソコン内のファイルを選びます。

3. ルーティングの設定

3. ルーティングの設定
3. ルーティングの設定

次に、フォームから送信されたデータを受け取るためのルートを設定します。ルートとは、どのURLにアクセスしたときにどの処理を行うかを決めるものです。


use App\Http\Controllers\UploadController;

Route::post('/upload', [UploadController::class, 'store']);

この設定によって、/uploadにデータが送られると、UploadControllerのstoreメソッドが実行されます。

4. コントローラでファイルを受け取る

4. コントローラでファイルを受け取る
4. コントローラでファイルを受け取る

コントローラは、送られてきたデータを処理する役割を持ちます。ここでファイルを受け取ります。


namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UploadController extends Controller
{
    public function store(Request $request)
    {
        $file = $request->file('file');
        return 'ファイルを受け取りました';
    }
}

requestというのは、ユーザーから送られてきたデータの箱のようなものです。その中からfileという名前のファイルを取り出しています。

5. ファイルをストレージに保存する

5. ファイルをストレージに保存する
5. ファイルをストレージに保存する

受け取ったファイルは、そのままでは保存されません。storeメソッドを使って、Laravelのストレージに保存します。


public function store(Request $request)
{
    $path = $request->file('file')->store('uploads');
    return '保存先: ' . $path;
}

uploadsというフォルダに保存されます。このフォルダはstorage/appの中に作られます。storeというメソッドは「保存する」という意味です。

6. ファイル名を指定して保存する方法

6. ファイル名を指定して保存する方法
6. ファイル名を指定して保存する方法

デフォルトでは自動でファイル名が決まりますが、自分で名前を指定することもできます。


public function store(Request $request)
{
    $file = $request->file('file');
    $filename = time() . '_' . $file->getClientOriginalName();
    $file->storeAs('uploads', $filename);

    return 'ファイル名: ' . $filename;
}

timeは現在の時間を表す数字で、重複を防ぐためによく使われます。元のファイル名と組み合わせて安全に保存できます。

7. ファイルのバリデーション(検証)

7. ファイルのバリデーション(検証)
7. ファイルのバリデーション(検証)

バリデーションとは、送られてきたデータが正しいかチェックすることです。例えば、画像だけ許可したり、サイズを制限したりできます。


public function store(Request $request)
{
    $request->validate([
        'file' => 'required|file|mimes:jpg,png,pdf|max:2048'
    ]);

    $path = $request->file('file')->store('uploads');
    return 'アップロード成功';
}

mimesはファイルの種類、maxはサイズ制限です。2048は2MBを意味します。これにより安全にファイルアップロードができます。

8. 保存したファイルを表示する

8. 保存したファイルを表示する
8. 保存したファイルを表示する

保存したファイルをブラウザで表示するには、公開用のリンクを作成する必要があります。Laravelではstorage:linkコマンドを使います。


php artisan storage:link

これにより、publicフォルダからファイルにアクセスできるようになります。例えば、/storage/uploads/ファイル名で表示できます。

9. Laravelのファイル操作を理解するポイント

9. Laravelのファイル操作を理解するポイント
9. Laravelのファイル操作を理解するポイント

Laravelのファイルアップロードは、初心者でも理解しやすい構造になっています。フォームで送信し、コントローラで受け取り、ストレージに保存するという流れをしっかり覚えることが重要です。

また、バリデーションやファイル名の管理を行うことで、安全で実用的なアプリケーションを作ることができます。最初は難しく感じても、一つ一つの処理を分けて考えることで理解しやすくなります。

まとめ

まとめ
まとめ

Laravelのファイルアップロードの基本を振り返る

Laravelでのファイルアップロードは、初心者でも理解しやすい構造になっています。重要なポイントは、フォームでファイルを送信し、ルーティングで受け取り、コントローラで処理し、ストレージに保存するという一連の流れです。この一連の処理は、Webアプリケーション開発において非常に重要であり、画像アップロード機能やPDFアップロード機能、ユーザープロフィール画像の登録など、さまざまな場面で活用されます。

特にLaravelでは、Requestクラスを利用してファイルを簡単に取得できるため、複雑な処理を意識する必要がありません。fileメソッドを使うことで、送信されたファイルを直感的に扱える点は大きなメリットです。また、storeメソッドやstoreAsメソッドを使うことで、保存先やファイル名を柔軟にコントロールできる点も魅力です。

ファイルアップロードフォームの重要性

HTMLフォームの設定は、ファイルアップロードの最初のステップです。特にenctype属性をmultipart form dataに設定することは必須です。この設定がないと、ファイルはサーバーに送信されません。初心者がよくつまずくポイントなので、必ず理解しておきましょう。


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

このようなシンプルなフォームでも、Laravelと組み合わせることで強力なファイルアップロード機能を実現できます。Bootstrapを使ってデザインを整えることで、ユーザーにとって使いやすいインターフェースを提供することも重要です。

コントローラとストレージの役割

コントローラは、ファイルアップロード処理の中心的な役割を担います。ユーザーから送信されたファイルを受け取り、必要なバリデーションを行い、安全にストレージへ保存します。Laravelのストレージ機能は非常に強力で、ローカル環境だけでなくクラウドストレージとも簡単に連携できます。


public function store(Request $request)
{
    $request->validate([
        'file' => 'required|file|mimes:jpg,png,pdf|max:2048'
    ]);

    $file = $request->file('file');
    $filename = time() . '_' . $file->getClientOriginalName();
    $path = $file->storeAs('uploads', $filename);

    return '保存先: ' . $path;
}

このコードでは、バリデーションによって安全性を確保しつつ、ファイル名の重複を防ぐ工夫も行っています。実務ではこのような対策が非常に重要になります。

バリデーションで安全性を高める

ファイルアップロードでは、セキュリティ対策が欠かせません。悪意のあるファイルがアップロードされるリスクを防ぐために、mimesやmaxルールを使ったバリデーションを必ず実装しましょう。これにより、許可されたファイル形式のみを受け付け、ファイルサイズの制限も行えます。

また、ファイル名の管理や保存先のディレクトリ設計も重要です。適切に管理することで、後からファイルを取得したり表示したりする処理がスムーズになります。

ファイル表示と公開設定の理解

保存したファイルをブラウザで表示するためには、storage linkコマンドを実行して公開ディレクトリとリンクさせる必要があります。この設定を行うことで、ユーザーがアップロードした画像やPDFをブラウザから直接確認できるようになります。


php artisan storage:link

このコマンドを実行することで、publicディレクトリからstorage内のファイルにアクセス可能になります。Webアプリケーションとしての利便性を高めるために重要な設定です。

実務で活かせるLaravelファイルアップロードの知識

Laravelのファイルアップロード機能は、ブログシステム、ECサイト、社内システムなど幅広い分野で活用されています。画像アップロード機能やファイル管理機能は、ユーザー体験を向上させる重要な要素です。

今回学んだ内容を応用することで、プロフィール画像の登録機能や複数ファイルアップロード機能、ドラッグアンドドロップ対応など、より高度な機能を実装することも可能になります。基本をしっかり理解することで、応用力が大きく広がります。

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

生徒

「Laravelのファイルアップロードって難しそうだと思っていましたが、流れで考えるとシンプルなんですね」

先生

「そうですね。フォーム送信、ルーティング、コントローラ、ストレージ保存の流れを理解すれば、基本はしっかり押さえられています」

生徒

「バリデーションも重要だと分かりました。安全に使うためには必須ですね」

先生

「その通りです。ファイルアップロードは便利な反面、セキュリティリスクもあるので必ずチェックを行いましょう」

生徒

「ファイル名を自分で決めたり、表示できるようにする設定も理解できました」

先生

「今回の知識を応用すれば、実務レベルのアプリケーション開発にも対応できます。繰り返し手を動かして理解を深めていきましょう」

関連記事:
カテゴリの一覧へ
新着記事
New2
Symfony
SymfonyでAPI向けにカスタムエラーメッセージを返す方法を解説!初心者でも安心のバリデーション基礎
New3
Symfony
Symfonyの動的フォームフィールド追加・削除を完全ガイド!初心者でもわかるフォーム操作入門
New4
Laravel
LaravelのMailableクラスの使い方を完全解説!初心者でもできるメール送信管理
人気記事
No.1
Java&Spring記事人気No1
CodeIgniter
CodeIgniterのセッション管理を徹底解説!値を保存・取得する基本操作
No.2
Java&Spring記事人気No2
Laravel
Laravelのnow()・today()関数の使い方完全ガイド!初心者でもわかる日時処理と日付操作
No.3
Java&Spring記事人気No3
Symfony
Symfony Twig入門|条件分岐とループをやさしく理解するテンプレート活用術
No.4
Java&Spring記事人気No4
Laravel
Laravelのabort()関数でエラーを返す方法!初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Laravel
Laravelの日付バリデーションの使い方を完全解説!初心者でも安心の丁寧ガイド
No.6
Java&Spring記事人気No6
Laravel
Laravelの@eachディレクティブで簡単に繰り返しテンプレートを表示する方法
No.7
Java&Spring記事人気No7
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.8
Java&Spring記事人気No8
Laravel
LaravelのThrottleミドルウェアでアクセス制限を実装する方法!初心者向け解説