web-dev-qa-db-fra.com

Ajouter un dossier dans le compartiment Amazon s3

Je souhaite ajouter un dossier dans mon compartiment Amazon s3 à l'aide du codage . Pouvez-vous s'il vous plaît me suggérer comment y parvenir?

28
Bharat Mhatre

Il n'y a pas de dossiers dans Amazon S3. La plupart des outils de navigateur S3 disponibles affichent simplement une partie du nom de la clé, séparée par un slash. 

Si vous en avez vraiment besoin, vous pouvez créer un objet vide avec la barre oblique à la fin. par exemple. "folder /" Cela ressemblera à un dossier si vous l'ouvrez avec un outil graphique et AWS Console. 

41
cloudberryman

Java avec AWS SDK:

  1. Il n'y a pas de dossiers dans s3, seulement des paires clé/valeur. La clé peut contenir des barres obliques (/), ce qui la fera apparaître comme un dossier dans la console de gestion, mais par programme ce n'est pas un dossier, c'est une valeur String.

  2. Si vous essayez de structurer votre compartiment s3, vos conventions de dénomination (les clés que vous donnez à vos fichiers) peuvent simplement suivre les modèles de répertoire normaux, à savoir folder/subfolder/file.txt.

    Lors de la recherche (en fonction de la langue utilisée), vous pouvez effectuer une recherche par préfixe avec un délimiteur. En Java, ce serait un appel à la méthode listObjects(String storageBucket, String prefix, String delimiter).

    La storageBucket est le nom de votre compartiment, la prefix est la clé que vous souhaitez rechercher et la delimiter est utilisée pour filtrer votre recherche en fonction de la prefix

16
tehemperorer

Comme tout le monde vous l'a dit, dans AWS S3, il n'y a pas de "dossiers", vous n'y pensez pas correctement. AWS S3 a des "objets", ces objets peuvent ressembler à des dossiers, mais ils ne sont pas vraiment des dossiers au sens le plus complet du mot. Si vous cherchez à créer des dossiers sur Amazon AWS S3, vous ne trouverez pas beaucoup de bons résultats.

Il existe un moyen de créer des "dossiers" en ce sens que vous pouvez créer une structure de dossiers simulée sur le S3, mais encore une fois, comprenez bien que vous créez des objets dans S3, pas des dossiers. Pour ce faire, vous aurez besoin de la commande "put-object" pour créer cette structure de dossiers simulée. Maintenant, pour utiliser cette commande, vous avez besoin des outils AWS CLI installés, allez ici Installation de AWS CLI pour connaître les instructions pour les installer.

La commande est la suivante:

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

La partie amusante de cette commande est qu’il n’est pas nécessaire que tous les "dossiers" (objets) soient créés avant d’exécuter cette commande. Cela signifie que vous pouvez avoir un "dossier" (objet) pour contenir des éléments, mais vous pouvez ensuite utiliser cette commande pour créer la structure de dossier simulée dans ce "dossier" (objet), comme indiqué plus haut. Par exemple, j'ai un "dossier" (objet) nommé "importateur" dans mon compartiment S3. Disons que je veux insérer sample.txt dans une structure de "dossier" (objet) de l'année, du mois, puis d'un exemple " dossier "(objet) dans tout cela.

Si je n'ai que l'objet "importateur" dans mon compartiment, je n'ai pas besoin d'entrer au préalable pour créer l'année, le mois et les exemples d'objets ("dossiers") avant d'exécuter cette commande. Je peux exécuter cette commande comme suit:

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

La commande put-object entrera ensuite et créera le chemin que j'ai spécifié dans l'indicateur --key. Voici un bijou: même si vous n'avez pas de fichier à télécharger sur le S3, vous pouvez toujours créer des objets ("dossiers") dans le compartiment S3. Par exemple, j'ai créé un script Shell pour "créer des dossiers". Dans le compartiment, en laissant le drapeau --body, en ne spécifiant pas de nom de fichier et en laissant une barre oblique à la fin du chemin indiqué dans le drapeau - clé, le système crée la structure de dossiers simulée souhaitée dans le compartiment S3. sans insérer un fichier dans le processus.

J'espère que cela vous aidera à comprendre un peu mieux le système.

Remarque: une fois que vous avez créé une structure de "dossier", vous pouvez utiliser la commande "sync" du S3 pour synchroniser le "dossier" descendant avec un dossier de votre ordinateur local ou même avec un autre compartiment S3.

14
Jravict

Le AWS: S3 Rails gem fait cela tout seul: 

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

Crée automatiquement les "dossiers" teaser et images s'ils n'existent pas déjà.

9
samvermette

Sous iOS (Objective-C), j'ai suivi le chemin

Vous pouvez ajouter le code ci-dessous pour créer un dossier par programme dans le compartiment Amazon s3. Ceci est extrait de code de travail. Toute suggestion bienvenue.

-(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

Avec AWS SDK .Net fonctionne parfaitement, ajoutez simplement "/" à la fin du dossier de noms:

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);

Puis actualisez votre console AWS, et vous verrez le dossier

3
elranu

Avec aws cli , il est possible de copier un dossier entier dans un compartiment.

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

Il y a aussi la possibilité de sync un dossier en utilisant aws s3 sync

3
kicker86

Pour Swift, j'ai créé une méthode dans laquelle vous passez une String pour le nom du dossier.

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
    })
}

Ensuite, il suffit d'appeler

 createFolderWith(Name:"newFolder")
2
Daniel Leonard

Voici comment vous pouvez réaliser ce que vous recherchez (à partir de code/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>/

Un nouveau dossier sera créé sur votre compartiment s3 et vous pourrez maintenant exécuter les instructions cp, mv, rm ..., c'est-à-dire gérer le dossier comme d'habitude.

Si ce nouveau fichier créé ci-dessus n'est pas requis, supprimez-le simplement. Vous avez maintenant créé un compartiment s3.

1
Yusuf Hassan

Vous pouvez sélectionner la langue de votre choix parmi les options disponibles AWS SDK

Vous pouvez également essayer les bibliothèques clientes minio disponibles dans Python , Go , .Net , Java , Javascript pour votre environnement de développement d’application, il possède un exemple de répertoire avec toutes les opérations de base énumérées. 

Disclaimer: Je travaille pour Minio

0
koolhead17

afin de créer un répertoire dans le compartiment s3 et de copier le contenu dans ce qui est assez simple.

La commande S3 peut être utilisée: Aws s3 cp abc/def.txt s3: // mybucket/abc /

Note:/est incontournable qui fait le répertoire, sinon il deviendra un fichier dans s3.

0
Manoj Rana

La liste ci-dessous crée un répertoire vide appelé "mydir1".

Ci-dessous, le code nodejs, il devrait être similaire pour d’autres langues.

L'astuce consiste à avoir une barre oblique (/) à la fin du nom de l'objet, comme dans "mydir1 /", sinon un fichier portant le nom "mydir1" sera créé.

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"
         }
         */
    } });

Source: http://docs.aws.Amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

0

Dans Swift 2.2, vous pouvez créer un dossier en utilisant 

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