Laravelで画像アップロードするサンプルコード

Laravelで画像ファイルをアップロードするサンプル

プロミディア合同会社の斉藤です。

Laravelを使って画像ファイルをアップロードするサンプルプログラムを作成しました。

今回は処理のポイントについて解説していきます。

また、完成したソースコードも私のGitHub上にアップロードしてありますので、よかったらダウンロードして動かしてみてください。

画像ファイルをアップロードするサンプルプログラムの概要

2画面構成で、トップページで画像を表示し、画像登録用の画面で画像を登録します。


 

トップページ

画像登録ページ

 

Laravelを使って画像ファイルをアップロードするポイント

Laravelを使って画像ファイルをアップロードするポイントは保存読み出しの2つあります。

下記のポイントさえ押さえておけば、実装自体は簡単です。

保存

・アップロードされた画像ファイルは「storage/app/public」フォルダに格納します。

・ファイル名は自動でランダムな名称が付与されます。

・データベースには生成されたファイル名のみを保存します。(パスは保存しない)

読み出し

・viewで画像ファイルへのパスを生成する際、Laravelのassetの命令を使ってパスを補完します。

・storageフォルダは外部から参照できないので、publicフォルダへシンボリックリンクを貼ります。

 

サンプルコードの解説

実際のコードの書き方について解説します。

画像ファイルのアップロード

画像ファイルを選択するブラウザ側はfileコントロールを使ってPOSTするだけです。

resources/views/item/create.blade.php

ファイルアップロードの記述

<input type=”file” class=”form-control” name=”image_file”>

csrfの記述がないとエラーになります。

{{ csrf_field() }}

画像ファイルの保存

リクエストで送られてきたファイルの処理方法は以下の通りです。

app/Http/Controllers/ItemController.php

アップロードされたファイルをsotreメソッド使って保存します。

その際、パスの指定は「public/img」と指定してください。これで「storage/app/public/img」下にランダムなファイル名で保存されます。

 

次にデータベースにはファイル名のみ保存します。

$pathの中身はファイルのパスも含まれていますので、basenameメソッドを使ってファイル名のみ保存します。

画像ファイルの読み出し

まず、Laravelの公式サイトにも記載されている通り、シンボリックリンクを貼ります。

プロジェクトフォルダ直下で以下のコマンドを実行してください。

php artisan storage:link

そうすると「public」以下にstorageフォルダが現れます。ただ、これは実体ではなくて、ショートカットです。

実体は「storage/app/public」フォルダです。

 

 

 

 

 

 

ここに保存されたファイルをブラウザ側から参照するには、bladeファイルに以下のように書くと表示できます。

※$item->file_nameはファイル名です。

<img src=”{{ asset(‘/storage/img/’.$item->file_name) }}”>

 

まとめ

Laravelで画像ファイルをアップロードする方法は、わかってしまえば簡単ですが、初めてだとそこそこハマると思います。

特にパスの関係がややこしいですね。

 

今回作成したサンプルプログラムは下記公式サイトのやり方を参考にしています。

公式サイト:Laravel 5.5 ファイルストレージ

 

ファイル周りのことをきちんと知りたければこちらの書籍がおすすめです。

2019年7月に発売された書籍でファイルの扱いについてもきちんと解説されています。

 

 

今回紹介したサンプルプログラムはこちらにアップしてあります。

GitHubのソースコード

 

Amazon S3の使い方も解説しています。

[st-card id=2420 label=”” name=”” bgcolor=”” color=”” readmore=”on”]

 

この記事を書いた人

斉藤 貞義

プロミディア合同会社代表。
会社員として約13年間、ソフトウェア開発の経験を積み2015年にPE-BANKに所属して独立。
システムの受託開発をメインとしながら、プログラミングスクール講師、Udemy講師、アフィリエイトサイト(30代のプログラミングスクール選び)の運営も行っている。