🐥
【Laravel】AWS S3にファイルをアップロードする
はじめに
LaravelでAWS S3にファイルをアップロードする手順をまとめてみました。
LaravelプロジェクトとAWS S3のバケットはすでに作成されているものとします。
手順
1. パッケージインストール
公式ドキュメントを参考に必要なパッケージをインストールします。
composer require league/flysystem-aws-s3-v3 "~1.0"
バージョンを指定しておかないとエラーになることがあるようです。
2. S3の設定を追加
S3の設定はconfig/filesystems.php
にデフォルト書かれているので、これを元に.env
ファイルに設定を追加します。
config/filesystems.php
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL')
],
アクセスキー、シークレットアクセスキー、バケット名のところにはAWSでS3を作成した時のものを入れます。
.env
AWS_ACCESS_KEY_ID=アクセスキー
AWS_SECRET_ACCESS_KEY=シークレットキー
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=バケット名
AWS_URL=https://s3-ap-northeast-1.amazonaws.com/バケット名
また、EC2にS3アクセス用のIAMロールを設定している場合、アクセスキーとシークレットキーは空白で登録します。
空白にすることでインスタンス内部に持っているアクセスキーを参照してくれます。
.env
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=バケット名
AWS_URL=https://s3-ap-northeast-1.amazonaws.com/バケット名
3. S3にアップロードするコマンドを追加
S3にアップロードするコードを必要な箇所に追加します。
$file = $request->file('file');
Storage::disk('s3')->putFile('/', $file);
ファイル名を指定したい場合は下記の方法でアップロードできます。
$file = $request->file('file');
$file->storeAs('/', $file_name, 's3');
Discussion