PHP Laravel プログラミング

LaravelでS3に画像ファイルをアップロードするサンプルプログラム

更新日:

Amazon s3 サンプル

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

プログラミングスクール講師をしている関係で、LaravelからAmazon S3に画像ファイルをアップロードする方法について調査することにしました。

Amazon S3に関する情報は調べれば多数見つかるのですが、S3について別に詳しくなりたくなくてとりあえず使えればいいというレベルの解説をしているサイトがなかったのでここに残します。

また、記事の最後でGitHubに上げたサンプルプログラムをダウンロードできるようにしておきましたので、よかったらそちらもご参照ください。

やる事の概要

大まかにやる事を先に列挙しておきます。

AWS

・AWSの管理画面でAmazon S3のバケットを作成する

・バケットのアクセス権限を公開に変更する

Laravelプロジェクト

・composerコマンドでflysystem-aws-s3-v3を導入する

・.envファイルにAWSの設定値を設定する

AWS側の設定

まずはAWS側をいじって、画像ファイルの格納場所を用意します。

Amazon S3でバケットを作成する

Amazon S3でファイルを格納する場所をバケットと呼びます。

初期状態ではバケットは作成されていませんので、AWSの管理画面から作成します。

クリックで大きくなります

バケット名、国名(英語に変換したもの)は後ほどLaravel側の設定項目に使用します。

 

アクセス権限の変更

ここで重要となるのは「アクセス権限」の項目です。

バケットを作成した直後はアクセスが非公開となっており、ここを公開に変更しないと、画像ファイルを格納しても外から見えません

という訳で、以下変更手順です。

バケット名をクリック

アクセス権限のタブを開く

ブロックパブリックアクセスの編集

一番下のみチェックを外す。

 

バケットポリシーの設定

バケットポリシーを設定しなくてはいけないのですが、コピペ用コードを置いたのでバケット名だけ変更してご利用ください。

※コピペしてバケット名だけご自身の内容に変更してください。

 

アクセスキー&シークレットキー

LaravelからS3を使うためには

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

の情報も必要となります。

 

これらの取得方法はAWSの公式ページを参照してください。

私もこのページの手順通りやって取得できました。

 

Laravel側の設定

AWS側の設定が終わったら、次はLaravel側で設定作業を行います。

flysystem-aws-s3-v3を導入

Laravelプロジェクトの直下で下記のコマンドを実行します。

完了まで数分かかりますのでしばらく放っておいてください。

完了するとfilesystems.phpdiskss3の項目が追加されます。

.envを編集

.envにAWSの設定項目が追加されているので、ここを埋めます。

Herokuで利用するには

Herokuにデプロイして利用する際、.envはデプロイされませんので、configコマンドで項目を追加する必要があります。

$ heroku config:set AWS_ACCESS_KEY_ID=[AWSのアクセスキー]

$ heroku config:set AWS_SECRET_ACCESS_KEY=[AWSのシークレットアクセスキー]

$ heroku config:set AWS_DEFAULT_REGION=[AWSで使用している国名]

$ heroku config:set AWS_BUCKET=[S3で作成したバケット名]

Amazon S3を使用するソースコードの書き方

LaravelからAmazon S3へファイルの格納と参照するコードを解説します。

とは言っても、この時点ですでに面倒な設定が完了しているので、あとは普通にStorageを使うだけです。

 

Amazon S3に画像ファイルを格納する

格納方法はStorageのインスタンスをS3で取得してputします。

 

Amazon S3に格納されている画像ファイルを参照する

保存したファイルの存在チェックを行い、あればそのURLを取得します。

 

ダウンロード

今回解説したサンプルプログラムはGitHub上からダウンロードできます。

https://github.com/SadayoshiSaito/amazon_s3_sample

 

【セミナー情報】

  • この記事を書いた人
  • 最新記事

斉藤 貞義

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

-PHP Laravel, プログラミング

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