PHP Laravel プログラミング

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の使い方も解説しています。

LaravelでS3に画像アップロードする方法

プログラミングスクール講師の斉藤です。 今回は、LaravelからAmazon S3に画像ファイルをアップロードする方法について解説いたします。 Amazon S3に関する情報は調べれば多数見つかるの ...

続きを見る

 

【セミナー情報】

Laravelを学ぶならこちらの書籍がわかりやすいです。
  • この記事を書いた人
  • 最新記事

斉藤 貞義

プロミディア合同会社代表。 北海道札幌市在住。 会社員としてソフトウェア開発を約13年経験後、PE-BANK所属のフリーランスエンジニアとして独立。 その2年半後に法人成りし、合同会社を設立。 現在は企業に常駐してソフトウェア開発をしつつ、収益を目的としてWebサイト作成、セミナーを開催している。

-PHP Laravel, プログラミング

Copyright© プロミディア合同会社 , 2020 All Rights Reserved.