こんにちは!ぐちです。
ACL(アクセスコントロールリスト)を設定する
CakePHPからAWS S3に画像を保存する方法でS3を用いた画像のアップロードについて書きましたがその際にACLを設定する方法をご紹介します。
デフォルトでは非公開になる?!
先日投稿しました記事の中でS3.phpに様々なメソッドを定義したと書きましたがファイルをアップロードするために以下のメソッドを追加しました。
protected function uploadFile($path, $fileName) { $ret = file_put_contents(S3_TARGET_URL.$path, file_get_contents($fileName)); return ($ret == false ? false : true); }
この処理でS3へファイルをアップロードするとACLがデフォルトのPrivateが設定されてしまいます。上記の処理は画像ファイルを公開(URLで誰でも見られるように)したかったので下記のようにACLを指定して公開(読み取り)にするように変更しました。
protected function uploadFile($path, $fileName) { $context = stream_context_create(array( 's3' => array( 'ACL' => CannedAcl::PUBLIC_READ ) )); $ret = file_put_contents(S3_TARGET_URL.$path, file_get_contents($fileName), null, $context); return ($ret == false ? false : true); }
ちなみにcopy()を使って階層が変わるような複製をした場合にもACLがPrivateに戻るようなので下記のように設定を渡すようにしました。
copy(S3_TARGET_URL.$srcPath.$fileName, S3_TARGET_URL.$dstPath.$fileName, $context);
今回も例によって間違いや「おいおい。。。」という内容があるかもしれませんがご容赦ください。。。