Laravel AWS S3にファイルをアップロード

2020年2月26日

PHP

LaravelでAWSのS3にファイルをアップロードするための基本的な設定を説明します。

 

 

下記関連ページでは画像自体をローカルストレージに保存し、そのパスをデータベースに保存しました。画像を画面に表示させる場合はそのパスを利用しています。本記事では、画像の保存先をS3に変更するだけで基本的な実装は全く同じ前提で話を進めますので、アプリケーションの構築方法は下記ページをご覧下さい。

 

関連ページ

Laravel Vue.jsで画像をアップロード DB保存までの流れ

 

 

またAWSのIAMユーザーおよびS3のバケットは作成済みであることを前提としています。

 

S3のバケット作成についてはこちら

S3にファイルをアップロードする

 

 

まず .env ファイルの下記項目を設定する必要があります。この設定自体はconfig/filesystems.phpに反映されます。

「AWS_DEFAULT_REGION」にはバケットを作成したリージョン名を設定します。アジアパシフィック(東京)を選択した場合は上記のようになります。「AWS_BUCKET」には作成済みのバケット名を設定します。

 

「AWS_ACCESS_KEY_ID(アクセスキー)」と「AWS_SECRET_ACCESS_KEY(シークレットアクセスキー)」を作成し取得してみます。

 

IAMのダッシュボードの「ユーザー」を選択します。

 

 

ユーザー名を選択します。

 

 

「認証情報」タブを選択して、「アクセスキーの作成」ボタンをクリックします。

 

 

下記のような画面が表示され「アクセスキー」と「シークレットアクセスキー」を取得することができます。

 

 

 

.envファイルを編集したらキャッシュをクリアして下さい。

 

次にローカルのファイルシステムとS3を操作するためのパッケージをインストールする必要があります。

 

以上で環境設定は完了です。

 

最後に上述した関連ページ先の変更部分だけを説明します。先にも述べたようにファイルの保存先をS3に変更するだけで動きます。

app/Http/Controllers/ImageApiController.php

25行目

StorageファザードでS3につなぎ、putメソッドを利用してファイルをアップロードしています。第1引数にはアップロード先のディレクトリ、第2引数にはフォームから受け取ったファイルデータ、第3引数には外部からアクセスできるようにpublicを指定しています。

 

28行目

アップロードした画像のURLを取得し、DBに保存しています。

 

 

参照ページ


 

Laravel 6.x ファイルストレージ

 

 

 

LINEで送る
Pocket

定番本
定期本
 
Copyright © 2020 思考の葉 All Rights Reserved.  プライバシーポリシー