2016-09-03 2 views
0

AWS S3では、my-bucketという名前のバケットがあります。AWS Ruby SDKを使用してバケットにアクセスしています。 my-bucketAWS Ruby SDKは、常に存在するキーを確認します。 'false'

私は(私はそれがS3で、「ディレクトリ」と呼ばれていませんが、ちょうど考えを示すために、知っている)S3に次のディレクトリ構造を持っている:

my-bucket/ 
    customers/ 
     products/ 
       - data1.txt 
       - data2.txt 
       ... 

私が確認したいのでmy-bucket/customers/products存在しませんAWS RubyのSDKには、私は次のコードを試してみました:

s3 = Aws::S3::Resource.new 
bucket = s3.bucket("my-bucket") 
result = bucket.object("customers/products").exists? 

をしかしresultは私が間違っているS3、でそのディレクトリを持っていないにもかかわらず、falseを与えますか? 「顧客/製品は、」オブジェクトとして存在していないためだ

答えて

3

。存在しているオブジェクトの接頭辞です。あなたは次のように述べた。

私はそれはS3内のディレクトリのためのちょうど別の用語よりも多くのですが、それはS3

に「ディレクトリ」

と呼ばれていません知っています。ディレクトリ(またはフォルダ)はS3にはまったく存在しません。キー付きのオブジェクトだけです。これは単一のフラットディレクトリのようなもので、ファイル名にスラッシュ文字を付けることができます。

ほとんどのS3ブラウジングアプリケーションはキー名のスラッシュを「ディレクトリ」と解釈し、便宜上ファイルシステムのような階層的な方法でオブジェクトを表示しますが、実際にはS3には存在しません。

他の答えで指摘したように、その接頭辞を含むオブジェクトが存在するかどうかを確認することをお勧めします。

+0

'Object'は' data.txt'のような 'customers/products'の中に含まれるオブジェクトを意味しますか? –

+0

オブジェクトはファイルを意味します。 –

0

使用 bucket.objects.with_prefix("customers/products").any?

+0

未定義のメソッド 'any? ' –

+0

あなたは完全なエラーを指定できますか? –

+0

また、awsドキュメントごとに、バケットを参照するためのバケット= s3.buckets ['bucket-name'] –