Добавить папку в Amazon S3 Bucket

Связано с, но явно не упомянуто здесь, точно, когда используется __all__. Это список строк, определяющих, какие символы в модуле будут экспортироваться, когда from import * используется в модуле.

Например, следующий код в foo.py явно экспортирует символы bar и baz:

__all__ = ['bar', 'baz']

waz = 5
bar = 10
def baz(): return 'baz'

Затем эти символы можно импортировать следующим образом:

from foo import *

print bar
print baz

# The following will trigger an exception, as "waz" is not exported by the module
print waz

Если комментарий __all__ выше, этот код будет выполняться в завершение, поскольку поведение по умолчанию import * заключается в том, чтобы импортировать все символы, которые не начинаются с подчеркивания, из заданного пространства имен.

Ссылка: https://docs.python.org/ 3.5 / tutorial / modules.html # importing-from-a-package

ПРИМЕЧАНИЕ. __all__ влияет только на поведение from import *. Члены, которые не упомянуты в __all__, все еще доступны извне модуля и могут быть импортированы с помощью from import .

29
задан rogerdpack 16 December 2014 в 16:32
поделиться

14 ответов

Java с AWS SDK:

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

  2. 118

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

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

17
ответ дан avojak 16 December 2014 в 16:32
поделиться

В 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");
        }
    }];
}
5
ответ дан Yogesh Dalavi 16 December 2014 в 16:32
поделиться

Драгоценный камень AWS: S3 rails делает это сам по себе:

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

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

9
ответ дан samvermette 16 December 2014 в 16:32
поделиться

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

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

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

.
4
ответ дан kicker86 16 December 2014 в 16:32
поделиться

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

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

43
ответ дан nhinkle 16 December 2014 в 16:32
поделиться

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

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

Команда выглядит следующим образом:

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.

16
ответ дан Jravict 16 December 2014 в 16:32
поделиться

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

3
ответ дан elranu 16 December 2014 в 16:32
поделиться

Вот как вы можете достичь того, что вы ищете (из кода / 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.

1
ответ дан Yusuf Hassan 16 December 2014 в 16:32
поделиться

Для 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")
2
ответ дан Daniel Leonard 16 December 2014 в 16:32
поделиться

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

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

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

Adding folders to S3

1
ответ дан Drakes 16 December 2014 в 16:32
поделиться

Вы можете выбрать нужный язык из доступных AWS SDK

В качестве альтернативы вы можете попробовать клиентские библиотеки minio, доступные в Python , Go , .Net , Java , Javascript для среды разработки приложений, в ней есть пример каталога со всеми перечисленными основными операциями.

Отказ от ответственности: я работаю на Minio

0
ответ дан koolhead17 16 December 2014 в 16:32
поделиться

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

Можно использовать команду S3: aws s3 cp abc / def.txt s3: // mybucket / abc /

Примечание: / должен создавать каталог, иначе он станет файлом в s3.

0
ответ дан Manoj Rana 16 December 2014 в 16:32
поделиться

Ниже создается пустой каталог с именем «mydir1».

Ниже приведен код nodejs, он должен быть аналогичным для других языков.

Хитрость заключается в том, чтобы иметь косую черту (/) в конце имени объекта, как в «mydir1 /», в противном случае будет создан файл с именем «mydir1».

let AWS = require('aws-sdk');
AWS.config.loadFromPath(__dirname + '\\my-aws-config.json');
let s3 = new AWS.S3();

var params = {
    Bucket: "mybucket1",
    Key: "mydir1/",
    ServerSideEncryption: "AES256" };

s3.putObject(params, function (err, data) {
    if (err) {
        console.log(err, err.stack); // an error occurred
        return;
    } else {
        console.log(data);           // successful response
        return;
        /*
         data = {
         ETag: "\"6805f2cfc46c0f04559748bb039d69ae\"",
         ServerSideEncryption: "AES256",
         VersionId: "Ri.vC6qVlA4dEnjgRV4ZHsHoFIjqEMNt"
         }
         */
    } });

Источник: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

0
ответ дан Manohar Reddy Poreddy 16 December 2014 в 16:32
поделиться

В Swift 2.2 вы можете создать папку, используя

func createFolderWith(Name: String!) {
    let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
    folderRequest.key = Name + "/"
    folderRequest.bucket = "Your Bucket Name"
    AWSS3.defaultS3().putObject(folderRequest).continueWithBlock({ (task) -> AnyObject? in
        if task.error != nil {
            assertionFailure("* * * error: \(task.error?.localizedDescription)")
        } else {
            print("created \(Name) folder")
        }
        return nil
    })
}
0
ответ дан Mohsin Qureshi 16 December 2014 в 16:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: