LoginSignup
5
3

More than 1 year has passed since last update.

AWS S3 Laravel Storage::putFileするときにfalseが帰ってくる

Last updated at Posted at 2022-04-04

概要

  • EC2に設置したLaravelアプリケーションの内部処理でファイルをS3に設置する処理でfalseが帰ってくる問題の解決方法をメモ的にまとめる。

原因

  • S3にアップロードするオブジェクト(ファイル) のポリシーをLaravel側で明示的にpublicに指定していたため。
  • 当該のS3バケットは「オブジェクト所有者」を「ACL無効(推奨)」に設定していたため、アップロードされるオブジェクト(ファイル)個々に権限を指定する事はできず、エラーが発生したっぽい。

問題までの経緯

  1. EC2のApache上で動作しているLaravelアプリケーションにおいて、formからファイルをPost → 受け取ってS3格納する処理を作成した。

  2. 受け取ったファイルをS3にアップロードする処理は下記の様に記載した。($fileは任意のバリデーションを通過したFormRequestクラスを継承したリクエストオブジェクトそのまま)

    Storage::putFile(ファイル設置するディレクトリのパス, $file, 'public');
    

問題

  1. 上記に記載したputFile処理でfalseが返される(正常にファイルアップロードされている場合、設置先のパスが返される。)

問題解決までの経緯

  1. アップロード処理を下記のように変更した。

    Storage::putFile(ファイル設置するディレクトリのパス, $file);
    
  2. 正常にファイルをアップロードする事ができた。

  3. putFile時にどうしてもpublicを指定してファイルアップロードしたい場合、アップロード先のバケットの「オブジェクト所有者」の設定を「ACL有効」に設定し「希望するバケット所有者」のラジオボタンを選択すれば大丈夫だと思う。(筆者未検証

5
3
0

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
  3. You can use dark theme
What you can do with signing up
5
3