Создание каталогов в Amazon S3 с использованием python, boto3

Я знаю, что ведра S3 действительно не имеют каталогов, потому что хранилище плоское. Но можно создавать каталоги программно с помощью python/boto3, но я не знаю, как это сделать. Я видел это в документальном фильме:

"Хотя хранилище S3 плоское: в ведрах есть ключи, S3 позволяет наложить структуру дерева каталогов на ваш ковш, используя разделитель в ваших ключах. Например, если вы назовете ключ 'a/b/f и используете'/в качестве разделителя, тогда S3 будет считать, что 'a является каталогом,' b является подкаталогом 'a, а' f является файл в 'b. "

Я могу создать только файлы в ведре S3:

    self.client.put_object(Bucket=bucketname,Key=filename)

но я не знаю, как создать каталог.

Ответ 1

Требуется небольшая модификация в имени ключа. self.client.put_object(Bucket=bucketname,Key=filename)

это должно быть изменено на

self.client.put_object(Bucket=bucketname,Key=directoryname/filename)

Вот и все.

Ответ 2

Если вы читаете документацию по API, вы должны это сделать.

import boto3 
s3 = boto3.client("s3") 
BucketName = "mybucket"
myfilename = "myfile.dat"
KeyFileName = "/a/b/c/d/{fname}".format(fname=myfilename) 
with open(myfilename) as f : 
  object_data = f.read()
  client.put_object(Body=object_data, Bucket=BucketName, Key=KeyFileName)

Честно говоря, это не "реальный каталог", а строковая структура preformat для организации.

Ответ 3

Добавление косой черты / в конец имени ключа для создания каталога не помогло мне:

client.put_object(Bucket="foo-bucket", Key="test-folder/")

Вы должны предоставить параметр Body для создания каталога:

client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')

Источник: ryantuck в выпуске boto3