はじめに
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で保存を行なうようにしています。
ここで実行をしようとすると、
このようなエラー文が表示されました。
ここで注目していただきたいのはThe bucket does not allow ACLs
という部分です。
ACLの設定に何かあるということでS3を見てみます。
AWS S3の設定を確認してみる
ACLの設定を開きます。
AWS S3→バケット→アクセス許可 から下の方にスクロールするとオブジェクト所有者の編集画面が出てきます。
ここをよく見てみると、ACLは無効になっていますと書いてあります。
編集からACLを有効にしてください。
(推奨されてるとはいえ、自分でACLの変更を行わないと使えないのは初めての人には優しくない気がしました)
この変更を行うことで画像をアップロードできるようになっていると思います。
最後に
今回のことから、まだまだ自分はAWSに慣れていないなと感じました。すごい便利で助かる機能ではあるのですが、覚えることが多くて大変です。今後少しずつ慣れていこうと思います。