Laravelでbase64の画像を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作業
    //POSTされた画像ファイルデータ取得しbase64でエンコードする
    $image = base64_encode(file_get_contents($request->image->getRealPath()));
    // base64エンコードしたバイナリデータを格納
    Model::insert([
     "comment" => $comment,
     "image" => $image
    ]);
    
  2. View編 表示したい部分で下記のように記述
    <img src="data:image/png;base64,<?= $image ?>">
    
    以上。