Amazon S3 boto - как создать папку? - PullRequest
105 голосов
/ 21 декабря 2009

Как я могу создать папку под корзиной, используя boto библиотеку для Amazon s3?

Я следовал инструкциям и создал ключи с разрешениями, метаданными и т. Д., Но нигде в документации по boto не описано, как создавать папки в корзине или создавать папки в папках в корзине.

Ответы [ 10 ]

119 голосов
/ 26 января 2010

В S3 нет понятия папок или каталогов. Вы можете создавать имена файлов, например "abc/xys/uvw/123.jpg", которые многие инструменты доступа S3, например S3Fox, отображают как структуру каталогов, но на самом деле это просто один файл в корзине.

45 голосов
/ 30 июля 2014

Предположим, что вы хотите создать папку abc / 123 / в вашем ведре, это просто пирог с Boto

k = bucket.new_key('abc/123/')
k.set_contents_from_string('')

Или используйте консоль

17 голосов
/ 16 сентября 2011

С 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, и вы увидите папку

8 голосов
/ 24 мая 2011

Добавьте "_ $ folder $" к имени вашей папки и вызову put.

    String extension = "_$folder$";
    s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);

см: http://www.snowgiraffe.com/tech/147/creating-folders-programmatically-with-amazon-s3s-api-putting-babies-in-buckets/

4 голосов
/ 14 декабря 2017

Используйте это:

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+'/'))
3 голосов
/ 21 марта 2019

Обновление для 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)
1 голос
/ 20 августа 2017

Хотя вы можете создать папку, добавив "/" к вашему имени_папки. Под капотом S3 сохраняет плоскую структуру в отличие от обычной NFS.

var params = {
            Bucket : bucketName,
            Key : folderName + "/"
        };
s3.putObject(params, function (err, data) {});
1 голос
/ 07 февраля 2017

Это действительно легко создавать папки. На самом деле это просто создание ключей.

Вы можете видеть мой код ниже, я создавал папку с именем 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
1 голос
/ 16 ноября 2013

S3 не имеет структуры папок, но есть нечто, называемое ключами.

Мы можем создать /2013/11/xyz.xls и будут показаны как папки в консоли. Но часть хранения S3 примет это как имя файла.

Даже при получении мы видим, что мы можем видеть файлы в определенной папке (или ключах), используя метод ListObjects и параметр Prefix.

0 голосов
/ 21 октября 2015

Видимо, теперь вы можете создавать папки в S3. С тех пор я не уверен, но у меня есть корзина в «стандартной» зоне, и я могу выбрать «Создать папку из выпадающего списка действий».

...