Добавить папку в Amazon S3 Bucket - PullRequest
29 голосов
/ 22 июля 2011

Я хочу добавить папку в мое хранилище amazon s3, используя кодирование.Подскажите, пожалуйста, как этого добиться?

Ответы [ 14 ]

43 голосов
/ 24 июля 2011

В Amazon S3 нет папок. Просто большинство доступных инструментов браузера S3 показывают часть имени ключа, разделенную косой чертой в виде папки.

Если вам это действительно нужно, вы можете создать пустой объект с косой чертой в конце. например папка / будет выглядеть как папка, если вы откроете ее с помощью инструмента с графическим интерфейсом и консоли AWS.

17 голосов
/ 21 декабря 2012

Java с AWS SDK:

  1. В s3 нет папок, только пары ключ / значение.Ключ может содержать косую черту (/), и в консоли управления он будет отображаться как папка, но программно это не папка, а строковое значение.

  2. Если выпытаясь структурировать ваш s3 bucket, тогда ваши соглашения об именах (ключи, которые вы даете своим файлам) могут просто следовать обычным шаблонам каталогов, например folder/subfolder/file.txt.

    При поиске (в зависимости от используемого вами языка) вы можетепоиск по префиксу с разделителем.В Java это будет вызов метода listObjects(String storageBucket, String prefix, String delimiter).

    storageBucket - это имя вашего сегмента, prefix - это ключ, который вы хотите найти, а delimiter используется дляОтфильтруйте результаты поиска по prefix.

16 голосов
/ 12 января 2016

Как все уже говорили, в AWS S3 нет никаких "папок", вы думаете о них неправильно. В AWS S3 есть «объекты», эти объекты могут выглядеть как папки, но на самом деле они не являются папками в полном смысле этого слова. Если вы ищете создание папок на Amazon AWS S3, вы не найдете много хороших результатов.

Существует способ создания «папок» в том смысле, что вы можете создать имитированную структуру папок на S3, но, опять же, обратите внимание на то, что вы создаете объекты в S3, а не папки. Для этого вам понадобится команда «put-object» для создания этой имитированной структуры папок. Теперь, чтобы использовать эту команду, вам нужны установленные инструменты CLI AWS, перейдите сюда Установка AWS CLI для получения инструкций по их установке.

Команда такая:

aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt

Теперь забавная часть этой команды заключается в том, что вам не нужно создавать все «папки» (объекты), созданные до запуска этой команды. Это означает, что у вас может быть «папка» (объект) для хранения вещей, но затем вы можете использовать эту команду для создания имитированной структуры папок в этой «папке» (объекте), как я обсуждал ранее. Например, у меня в папке S3 есть «папка» (объект) с именем «import», допустим, я хочу вставить sample.txt в структуру «папка» (объект) года, месяца, а затем образца » папка "(объект) во всем этом.

Если в моем контейнере есть только объект-импортер, мне не нужно заранее заходить, чтобы создать год, месяц и образцы объектов ("папок") перед выполнением этой команды. Я могу запустить эту команду так:

aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt

Затем будет введена команда put-object и создаст путь, который я указал в флаге --key. Вот немного драгоценности: даже если у вас нет файла для загрузки на S3, вы все равно можете создавать объекты («папки») внутри корзины S3, например, я создал сценарий оболочки для «создания папок» в пределах корзины, оставив флаг --body, не указав имя файла и оставив косую черту в конце пути, указанного в флаге --key, система создает желаемую имитированную структуру папок в корзине S3 без вставки файла в процессе.

Надеюсь, это поможет вам немного лучше понять систему.

Примечание: как только вы создали структуру «папок», вы можете использовать команду «синхронизация» S3 для синхронизации наследующей «папки» с папкой на вашем локальном компьютере или даже с другой корзиной S3.

9 голосов
/ 18 декабря 2011

Gem AWS: S3 rails делает это самостоятельно:

AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)

Автоматически создаст teaser и images «папки», если они еще не существуют.

5 голосов
/ 22 декабря 2016

В iOS (Objective-C) я поступил следующим образом

Вы можете добавить код ниже, чтобы программно создать папку внутри корзины Amazon 3. Это рабочий фрагмент кода. Любое предложение Добро пожаловать.

-(void)createFolder{
    AWSS3PutObjectRequest *awsS3PutObjectRequest = [AWSS3PutObjectRequest new];
    awsS3PutObjectRequest.key = [NSString stringWithFormat:@"%@/", @"FolderName"];
    awsS3PutObjectRequest.bucket = @"Bucket_Name";
    AWSS3 *awsS3 = [AWSS3 defaultS3];
    [awsS3 putObject:awsS3PutObjectRequest completionHandler:^(AWSS3PutObjectOutput * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"error Creating folder");
        }else{
            NSLog(@"Folder Creating Sucessful");
        }
    }];
}
4 голосов
/ 16 мая 2017

С aws cli можно скопировать всю папку в корзину.

aws s3 cp /path/to/folder s3://bucket/path/to/folder --recursive

Существует также опция синхронизация папки с использованиемaws s3 sync

3 голосов
/ 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, и вы увидите папку

2 голосов
/ 31 января 2017

Для Swift я создал метод, в котором вы передаете String для имени папки.

Swift 3:

import AWSS3

func createFolderWith(Name: String!) {
    let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
    folderRequest.key = Name + "/"
    folderRequest.bucket = bucket
    AWSS3.default().putObject(folderRequest).continue({ (task) -> Any? in
        if task.error != nil {
            assertionFailure("* * * error: \(task.error?.localizedDescription)")
        } else {
            print("created \(Name) folder")
        }
        return nil
    })
}

Затем просто вызовите

 createFolderWith(Name:"newFolder")
1 голос
/ 17 апреля 2019

Это спорная тема, поэтому на снимке экрана консоли AWS S3 в 2019 году добавлено папок и примечание:

При создании папки S3консоль создает объект с указанным выше именем, к которому добавляется суффикс "/", и этот объект отображается как папка в консоли S3.

Затем, используя кодирование, вы можете просто настроить имя объекта, добавив к немудопустимое имя папки строка и косая черта.

Adding folders to S3

1 голос
/ 06 февраля 2019

Вот как вы можете достичь того, что вы ищете (из кода / cli):

--create/select the file (locally) which you want to move to the folder:

~/Desktop> touch file_to_move

--move the file to s3 folder by executing:

~/Desktop> aws s3 cp file_to_move s3://<path_to_your_bucket>/<new_folder_name>/

В вашем контейнере s3 будет создана новая папка, и вы теперь сможете выполнять cp, mv, rm ... операторы, т.е. как обычно управляют папкой .

Если этот новый файл, созданный выше, не требуется, просто удалите его.Теперь у вас есть ведро s3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...