Laravelで画像を保存し、そのパスをDBに格納する方法

Laraveで画像を扱いたい!!

普通にLaravelでWebアプリケーションを作成すると基本的に「画像をDBで扱う」というシーンが出てくると思います。そんな時にネットで調べたら2つの方法が出てくると思います。

フォームを作り、画像を保存してから表示するまでを記述します。

共通部分

今回フォームの部分は同じものとして仮定して話をしていので、以下のフォームを用意したものとします。

<form action="/post" method="POST" enctype="multipart/form-data" class="post_form">
    <div class="form-group">
        <label for="exampleFormControlFile1">ファイル</label>
        <input type="file" name="image" class="form-control-file" id="exampleFormControlFile1">
    </div>

    <div class="form-group">
        <label for="exampleFormControlTextarea1">キャプション</label>
        <textarea class="form-control" name="comment" id="exampleFormControlTextarea1" rows="3"></textarea>
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

画像をストレージに保存して、そのパスをDBに挿入する

Laraveではこれが主流のように思われます。

  1. Controller作業

    //画像ファイルが生成される&pathにフォルダのパスが記述される
    $path = $request->file->store('public');
    //$pathの値をDBに入れる
    Model::insert([
     "comment" => $comment,
     "image" => $path
    ]);
    
  2. コマンド編 コマンドラインで下記を実行 php artisan storage:link

  3. View編 表示したい部分で下記のように記述

<img src="{{ asset('storage/' . $filename) }}">

以上。