search
LoginSignup
0
Help us understand the problem. What are the problem?

posted at

AWS S3に画像をアップロードできない

はじめに

PHP Laravelを使ってwebアプリを開発しようとしてたところAWS S3に画像をpublicで保存をしようとしたところエラーが出てきてしまいました。
S3の設定の方で変更をすることで直すことが出来たので、そちらの方法を説明いたします。

AWS S3に画像をアップロード(エラー)

LaravelのControllerに以下のコードで保存をします。

public function store(PlanRequest $request, Plan $plan) {
        $input = $request['plan']; 
        $input += ['user_id' => $request->user()->id];
        $image = $request->file('image');
        // S3に画像を保存
        $path = Storage::disk('s3')->putFile('/', $image, 'public');
        $input += ['image' => Storage::disk('s3')->url($path)];
        
        $plan->fill($input)->save();
        return redirect('/plans/'.$plan->id);
    }

input等には他の保存するべきデータを入れています。
pathの文でS3にpublicで保存を行なうようにしています。

ここで実行をしようとすると、
スクリーンショット 2022-09-20 17.57.39.png
このようなエラー文が表示されました。

ここで注目していただきたいのはThe bucket does not allow ACLsという部分です。
ACLの設定に何かあるということでS3を見てみます。

AWS S3の設定を確認してみる

ACLの設定を開きます。
AWS S3→バケット→アクセス許可 から下の方にスクロールするとオブジェクト所有者の編集画面が出てきます。
スクリーンショット 2022-09-20 18.01.43.png
ここをよく見てみると、ACLは無効になっていますと書いてあります。
編集からACLを有効にしてください。
スクリーンショット 2022-09-20 18.04.33.png
(推奨されてるとはいえ、自分でACLの変更を行わないと使えないのは初めての人には優しくない気がしました)

この変更を行うことで画像をアップロードできるようになっていると思います。

最後に

今回のことから、まだまだ自分はAWSに慣れていないなと感じました。すごい便利で助かる機能ではあるのですが、覚えることが多くて大変です。今後少しずつ慣れていこうと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0
Help us understand the problem. What are the problem?