s3バケットのフォルダ存在チェックでハマった事

はじめに

久しぶりの投稿だなー
サボりすぎかwww
今回はAWS SDK for PHPで用意されている関数doesObjectExistを使って、
バケット内にあるフォルダーの存在チェックをやった時にハマった事を書いていきたいと思います。

問題

s3コンソール上で確認するとフォルダはあるにも関わらず、
doesObjectExistで存在チェックするとfalseで返ってくるケースがある!!!

原因

そもそもs3にはフォルダというものがなくて、所謂フォルダもファイルもオブジェクトとして認識している。

では、どんな場合に上記問題が発生するの?

存在しないフォルダに対して、直接ファイルをPUTする場合に発生してしまいます!
例:
プログラムなどでdata/のフォルダがない状態で直接data/abc.txtをPUTした場合
s3内部では以下のような形になります。

上記のような状況でdoesObjectExisを使って、オブジェクトの存在チェックを行うとfalseが返ってきます。

解決方法

では、どうすればいいの!!!

フォルダの存在チェックを行いたい場合はdoesObjectExisを使わずに、listObjectsを使いましょう!

Sample

listObjectsPrefixを使って、一致するオブジェクトを探す。
対象オブジェクトがあればContentsがセットされたレスポンスデータが返ってくるので、
一個でもあれば、フォルダがあるとみなして良いと思います。

– PR –
– PR –