Amazon S3 boto - как создать папку?
Как я могу создать папку под ведром, используя boto
библиотека для Amazon s3?
Я следовал этому руководству и создал ключи с разрешениями, метаданными и т. Д., Но нигде в документации по boto он не описывает, как создавать папки в корзине или создавать папки в папках в корзине.
13 ответов
В S3 нет понятия папок или каталогов. Вы можете создавать имена файлов, такие как "abc/xys/uvw/123.jpg"
что многие инструменты доступа S3, такие как S3Fox
показать как структуру каталогов, но на самом деле это просто один файл в корзине.
Предположим, что вы хотите создать папку abc/123/ в вашем ведре, это очень просто с Boto
k = bucket.new_key('abc/123/')
k.set_contents_from_string('')
Или используйте консоль
Использовать этот:
import boto3
s3 = boto3.client('s3')
bucket_name = "YOUR-BUCKET-NAME"
directory_name = "DIRECTORY/THAT/YOU/WANT/TO/CREATE" #it's name of your folders
s3.put_object(Bucket=bucket_name, Key=(directory_name+'/'))
С AWS SDK .Net работает отлично, просто добавьте "/" в конце строки имени папки:
var folderKey = folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);
Затем обновите консоль AWS, и вы увидите папку
Пробовал многие методы выше и добавлял косую черту /
до конца имени ключа, создать каталог у меня не получилось:
client.put_object(Bucket="foo-bucket", Key="test-folder/")
Вы должны поставить Body
параметр для создания каталога:
client.put_object(Bucket='foo-bucket',Body='', Key='test-folder/')
Источник: ryantuck в выпуске boto3
Добавьте "_$folder$" к имени вашей папки и положите вызов.
String extension = "_$folder$";
s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);
Обновление для 2019 года, если вы хотите создать папку с путем имя_каталога /folder1/folder2, вы можете использовать этот код:
from boto3 import client, resource
class S3Helper:
def __init__(self):
self.client = client("s3")
self.s3 = resource('s3')
def create_folder(self, path):
path_arr = path.rstrip("/").split("/")
if len(path_arr) == 1:
return self.client.create_bucket(Bucket=path_arr[0])
parent = path_arr[0]
bucket = self.s3.Bucket(parent)
status = bucket.put_object(Key="/".join(path_arr[1:]) + "/")
return status
s3 = S3Helper()
s3.create_folder("bucket_name/folder1/folder2)
Это действительно легко создавать папки. На самом деле это просто создание ключей.
Вы можете увидеть мой код ниже, я создал папку с именем utc_time.
Не забывайте, что ключ заканчивается на "/", как показано ниже, это означает, что это ключ:
Key = 'folder1 /' + utc_time + '/'
client = boto3.client('s3')
utc_timestamp = time.time()
def lambda_handler(event, context):
UTC_FORMAT = '%Y%m%d'
utc_time = datetime.datetime.utcfromtimestamp(utc_timestamp)
utc_time = utc_time.strftime(UTC_FORMAT)
print 'start to create folder for => ' + utc_time
putResponse = client.put_object(Bucket='mybucketName',
Key='folder1/' + utc_time + '/')
print putResponse
Хотя вы можете создать папку, добавив "/" к вашему имени_папки. Под капотом S3 сохраняет плоскую структуру в отличие от вашего обычного NFS.
var params = { Bucket: bucketName, Ключ: имя_папки + "/" }; s3.putObject(params, function (err, data) {});
У S3 нет структуры папок, но есть нечто, называемое ключами.
Мы можем создать /2013/11/xyz.xls
и будет отображаться как папка в консоли. Но часть хранения S3 примет это как имя файла.
Даже при получении мы видим, что мы можем видеть файлы в определенной папке (или ключах), используя ListObjects
метод и использование Prefix
параметр.
Следующие работы с использованием Python boto3
s3 = boto3.client("s3")
s3.put_object(Bucket="dest_bucket", Key='folder_name/')
Этот вопрос более актуален для будущего, поэтому добавление этого обновления. Я использую метод upload_file, как показано ниже.
fold ='/my/system/filePath/tabmcq/Tables/auto/18.tsv'
s3_client.upload_file(
Filename = full/file/path/filename.extension,
Bucket = "tab-mcq-de",
Key = f"{fold.split('/')[-3]}/{fold.split('/')[-2]}/{fold.split('/')[-1]}"
)
Идеи - параметр «Имя файла» требует абсолютного пути к файлу в вашей системе. Для параметра «Ключ» требуется относительный путь к файлу из исходного каталога, в котором находятся ваши файлы.
В этом примере ключевой параметр должен содержать значение «Таблицы/авто/18.tsv», чтобы клиент мог создавать папки.
Надеюсь это поможет.
Видимо теперь вы можете создавать папки в S3. С тех пор я не уверен, но у меня есть корзина в "стандартной" зоне и я могу выбрать "Создать папку из выпадающего меню".