🖼️
Laravelで画像をAWS S3にアップロードする方法
今回はAWS S3へ画像アップロードする手順を解説します
この記事ではAWS側の設定からLaravel側のコード実装まで、実際に動作するコードとともにステップバイステップで紹介する流れです
使用技術
- AWS S3
- PHP: 8.4
- Composer:2.8.8
- Laravel: 12.0
1.IAMユーザーの権限設定
使用するユーザーポリシーに「AmazonS3FullAccess」の書き込み権限を付与します
■ダッシュボード「IAM」→「ユーザー」→「許可を追加」
2.IAMユーザーのアクセスキー作成
アプリ側からAWSへ接続できるように、アクセスキーを発行します
「アクセスキー」「シークレットアクセスキー」が発行されます
後ほどenvファイルで使うためCSVファイルをダウンロードし、完了ボタンを押してください
3.S3のバケット作成
バケットを作成します
バケットとはファイルを区別するフォルダのようなものです
※リージョンは予め「東京」を設定ください
■ダッシュボード「S3」→「汎用バケット」→「バケットを作成」
- AWS リージョン:アジアパシフィック (東京) ap-northeast-1
- バケットタイプ:汎用
- バケット名:任意の名前
- オブジェクト所有者:ACL無効
- このバケットのブロックパブリックアクセス設定:パブリックアクセスをすべて ブロック
- バケットのバージョニング:無効にする
- デフォルトの暗号化
- 暗号化タイプ:Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)
- バケットキー:有効にする
3.Laravel側の設定
ここからはアプリ側のLaravelを設定していきます
flysystem-aws-s3-v3インストール
composer require league/flysystem-aws-s3-v3
.env
AWS_ACCESS_KEY_ID=[IAMユーザーのアクセスキー]
AWS_SECRET_ACCESS_KEY=[IAMユーザーのシークレットアクセスキー]
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=[バケット名]
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'),
'endpoint' => env('AWS_ENDPOINT'),
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
'throw' => false,
'report' => false,
],
Controller
public function store(StoreRequest $request): RedirectResponse
{
if ($request->hasFile('image')) {
$image = $request->file('image');
$fileName = time() . '_' . $image->getClientOriginalName();
$s3 = Storage::disk('s3');
$result = $s3->putFileAs('', $image, $fileName);
if ($result) {
$imageUrl = $s3->url($result);
return back()->with('status', 'アップロード成功: ' . $imageUrl);
}
}
}
blade.php
<div class="sm:col-span-4">
<label for="image" class="block text-sm font-medium text-gray-700">
画像<span class="text-red-500">*</span>
</label>
<div class="mt-1">
<input type="file" name="image" id="image" accept="image/*" required>
</div>
</div>
設定は以上です
画像から画像を登録すると、、、
無事バケットへアップロード出来ていることが確認できます
まとめ
今回は、LaravelとAWS S3を連携した画像アップロード機能の実装方法について解説しました
本記事が参考になれば幸いです!
Discussion