2016-09-03 4 views
0

В AWS S3 у меня есть ведро с именем my-bucket, я использую AWS Ruby SDK для доступа к моему ковшу.AWS Ruby SDK, проверьте ключ, всегда существует «false»

под my-bucket Я следующую структуру каталогов в S3 (я знаю, что это не называется «каталог» в S3, но только, чтобы показать идею):

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

Я хочу, чтобы проверить, действительно my-bucket/customers/products существует с AWS SDK рубин, я попытался следующий код:

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

Но result дает false, даже если у меня есть этот каталог в S3, где я не прав?

ответ

3

Это потому, что «клиенты/продукты» не существует как объект. Это просто префикс для некоторых объектов, которые существуют. Вы сказали:

Я знаю, что это не называется «каталог» в S3

Однако это больше, чем просто другой термин для каталогов в S3. Каталоги (или папки) вообще не существуют в S3. Есть только объекты с ключами. Это похоже на один плоский каталог, где ваши имена файлов могут содержать в них символы косой черты.

Большинство приложений для просмотра S3 будут интерпретировать косые черты в именах клавиш как «каталоги» и отображать объекты в иерархическом стиле, например, для файловой системы, но эти каталоги/папки на самом деле не существуют в S3.

Как указано в другом ответе, лучше всего проверить, существуют ли какие-либо объекты, содержащие этот префикс.

+0

'Объект' означает объект, содержащийся внутри' customers/products' like 'data.txt'? –

+0

Объект означает файл, да. –

0

Использование bucket.objects.with_prefix("customers/products").any?

+0

undefined method 'any?' –

+0

Вы можете указать полную ошибку? –

+0

Также в соответствии с документами aws для ссылки на ведро используется bucket = s3.buckets ['bucket-name'] –

Смежные вопросы