カテゴリ: Laravel 更新日: 2026/05/12

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

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

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

生徒

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

先生

「フォームからファイルを送信して、サーバーに保存することで実現できます。」

生徒

「フォームと保存ってどうつながるんですか?」

先生

「順番に仕組みを見ていくと、とてもシンプルですよ。では一緒にやってみましょう。」

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

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

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

この処理は大きく分けて、フォームでファイルを選ぶ、サーバーに送る、保存する、という流れになります。初心者の方は、まずこの流れをイメージすることが大切です。

例えるなら、郵便のようなものです。ユーザーがファイルを封筒に入れて送信し、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>

multipart/form-dataとは、ファイルを含むデータを送信するための形式です。これを設定しないと、ファイルが正しく送信されません。

3. ルーティングの設定

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

次に、送信されたデータを受け取るためのルートを設定します。ルートとは、URLと処理を結びつける仕組みです。


use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UploadController;

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

この設定により、フォームから送信されたデータがコントローラーに渡されます。

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

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

コントローラーでは、送信されたファイルを受け取ります。ここで使うのがrequestです。これは送信されたデータ全体を扱うためのものです。


namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

file()は、フォームで指定したname属性と一致させる必要があります。

5. ファイルを保存する方法

5. ファイルを保存する方法
5. ファイルを保存する方法

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


public function store(Request $request)
{
    $path = $request->file('file')->store('uploads');
    return $path;
}

このコードでは、storageフォルダの中にuploadsフォルダが作られ、その中にファイルが保存されます。

storeは簡単に保存できる便利な機能で、初心者にもおすすめです。

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

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

ファイル名を自分で決めたい場合は、storeAsを使います。


public function store(Request $request)
{
    $file = $request->file('file');
    $file->storeAs('uploads', 'sample.jpg');
    return '保存完了';
}

これにより、指定した名前で保存できます。例えば、ユーザーごとに名前を変えることも可能です。

7. publicフォルダで公開する方法

7. publicフォルダで公開する方法
7. publicフォルダで公開する方法

保存したファイルをブラウザで表示するには、publicフォルダを使います。Laravelではシンボリックリンクという仕組みで接続します。


php artisan storage:link

これを実行すると、storage内のファイルがpublicからアクセスできるようになります。

8. バリデーションで安全にアップロードする

8. バリデーションで安全にアップロードする
8. バリデーションで安全にアップロードする

ファイルアップロードでは、必ずチェックを行うことが重要です。これをバリデーションといいます。


public function store(Request $request)
{
    $request->validate([
        'file' => 'required|image|max:2048'
    ]);

    $path = $request->file('file')->store('uploads');
    return $path;
}

ここでは画像ファイルのみ許可し、サイズを制限しています。これにより、不正なファイルのアップロードを防ぐことができます。

まとめ

まとめ
まとめ

Laravelでファイルアップロードを理解するための総まとめ

Laravelでファイルアップロードを行う方法について、フォーム作成から保存処理、公開設定、そしてバリデーションまで一通りの流れを学びました。初心者の方にとって重要なのは、全体の流れをしっかり理解することです。ファイルアップロードは単なる機能の一つではなく、ユーザーからデータを受け取る重要な仕組みであり、Webアプリケーション開発において頻繁に使われます。

まず、HTMLフォームでファイルを選択する際には、enctype属性にmultipart form dataを設定することが必須です。これを忘れてしまうと、どれだけ正しいコードを書いてもファイルは送信されません。これは初心者がつまずきやすいポイントの一つです。

次に、ルーティングを設定することで、フォームから送信されたデータをLaravelのコントローラーに渡すことができます。このルーティング設定により、URLと処理が紐付けられ、ユーザーの操作がプログラムとして処理されます。

コントローラーでは、requestオブジェクトを使ってファイルを受け取ります。fileメソッドを使うことで、簡単にアップロードされたファイルにアクセスできます。このとき、フォームのname属性と一致させることが重要です。

そして、受け取ったファイルはstoreメソッドやstoreAsメソッドを使って保存します。storeは自動でファイル名を生成してくれる便利な方法であり、storeAsは自分でファイル名を指定したい場合に使用します。用途に応じて使い分けることで、より柔軟なファイル管理が可能になります。

また、保存したファイルをブラウザで表示したい場合は、storageとpublicをつなぐためにartisanコマンドを実行します。これにより、ユーザーがアップロードした画像やファイルをWeb上で表示できるようになります。

さらに、バリデーションを行うことで、安全なファイルアップロードを実現できます。画像のみ許可する、ファイルサイズを制限するなどの設定を行うことで、不正なファイルや危険なデータのアップロードを防ぐことができます。

Laravelファイルアップロードの実践サンプルコード


namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UploadController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'file' => 'required|image|max:2048'
        ]);

        $file = $request->file('file');

        $path = $file->store('uploads');

        return $path;
    }
}

上記のコードは、Laravelでファイルアップロードを安全かつシンプルに実装する基本形です。初心者の方はまずこの形をしっかり理解し、応用していくことが大切です。

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

生徒

「Laravelでファイルアップロードの流れがだいぶ分かってきました。フォームで送って、コントローラーで受け取って、保存するんですよね。」

先生

「その通りです。特に重要なのは、全体の流れを理解することです。部分的に覚えるよりも、流れをつかむことで応用ができるようになります。」

生徒

「enctypeの設定やバリデーションも重要でしたね。忘れると動かないところが多かったです。」

先生

「そうですね。特にファイルアップロードはセキュリティ面も重要です。不正なファイルを防ぐためにバリデーションは必ず行いましょう。」

生徒

「storeとstoreAsの違いも理解できました。用途によって使い分けるんですね。」

先生

「その理解はとても大切です。実務ではファイル名を管理することも多いので、状況に応じて選択できるようになりましょう。」

生徒

「これでLaravelのファイルアップロードは一通りできそうです。実際にアプリで使ってみます。」

先生

「ぜひ実践してみてください。繰り返し使うことで、自然と理解が深まります。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルーティングでサブドメインを使う方法!初心者向けにやさしく解説
New2
Laravel
Laravelでマルチ言語ルートを設定する方法!ロケールごとのprefixで簡単管理
New4
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
人気記事
No.1
Java&Spring記事人気No1
Symfony
SymfonyのRemember Me機能を完全解説!初心者でもわかるログイン保持の仕組み
No.2
Java&Spring記事人気No2
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.3
Java&Spring記事人気No3
Laravel
Laravelでルートに中間処理を追加する方法!ミドルウェア活用ガイド
No.4
Java&Spring記事人気No4
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.5
Java&Spring記事人気No5
Laravel
LaravelのFeatureテストとUnitテストの違いを理解しよう
No.6
Java&Spring記事人気No6
Laravel
Laravelでドメインルートを使う方法!マルチドメイン対応を初心者向けに解説
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterで多言語対応(Language)を徹底解説!言語切り替え機能を実装
No.8
Java&Spring記事人気No8
CodeIgniter
CodeIgniterでファイルアップロードとストレージ管理をマスター!初心者向け完全ガイド