前提・実現したいこと
laravelでリクエストで渡ってきた画像ファイルをAWS S3へアップしたい
発生している問題・エラーメッセージ
画像をアップしようとすると、下記のエラーが出ます。
The PutObject operation requires non-empty parameter: Bucket
該当のソースコード
php
1's3' => [ 2 'driver' => 's3', 3 'key' => env('AWS_ACCESS_KEY_ID'), 4 'secret' => env('AWS_SECRET_ACCESS_KEY'), 5 'region' => env('AWS_DEFAULT_REGION'), 6 'bucket' => env('AWS_BUCKET'), 7 ],
env
1AWS_ACCESS_KEY_ID=AKIAT~~~~ 2AWS_SECRET_ACCESS_KEY=WLJpg+~~~~~ 3AWS_DEFAULT_REGION=ap-northeast-1 4AWS_BUCKET=umarche-bucket
php
1class ImageController extends Controller 2{ 3public function store(UploadImageRequest $request) 4 { 5 $imageFiles = $request->file('files'); 6 7 if (!is_null($imageFiles)) { 8 foreach ($imageFiles as $imageFile) { 9 $fileNameToStore = ImageService::upload($imageFile); 10 11 Image::create([ 12 'owner_id' => Auth::id(), 13 'filename' => $fileNameToStore 14 ]); 15 } 16 } 17 18 return redirect()->route('owner.images.index') 19 ->with(['message' => '画像登録を実施しました。', 'status' => 'info']); 20}
php
1class ImageService 2{ 3 public static function upload($imageFile) 4 { 5 // dd($imageFile['image']); 6 7 if (is_array($imageFile)) { 8 $file = $imageFile['image']; // 配列なので[‘key’] で取得 9 } else { 10 $file = $imageFile; 11 } 12 $fileName = uniqid(rand().'_'); 13 $extension = $file->extension(); 14 $fileNameToStore = $fileName. '.' . $extension; 15 $resizedImage = InterventionImage::make($file)->resize(1920, 1080)->encode(); 16 17 // バケットの'images'フォルダへアップロード 18 Storage::disk('s3')->put('/images', $file, 'public'); 19 20 return $fileNameToStore; 21 } 22}
試したこと
エラー内容を検索して調べたところ、envファイルの記載のミスで発生するとのこと。
filesystem.phpと.envの記載の確認したが、問題なし。
filesystem.phpに値を直接入れてみたところ、今度は別のエラーが発生。
Missing required client configuration options: region: (string) A "region" configuration value is required for the "s3" service (e.g., "us-west-2"). A list of available public regions and endpoints can be found at http://docs.aws.amazon.com/general/latest/gr/rande.html
補足情報(FW/ツールのバージョンなど)
laravel8
flysystem-aws-s3-v3": "~1.0"
あなたの回答
tips
プレビュー