2011-07-22 5 views

Répondre

37

Il n'y a aucun dossier dans Amazon S3. C'est juste que la plupart des outils du navigateur S3 disponibles montrent une partie du nom de la clé séparée par une barre oblique en tant que dossier.

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.

+5

Il ressemble à des dossiers pour moi? – Nate

+0

Regardez ceci http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html – lucasddaniel

3

Avec AWS SDK .Net fonctionne parfaitement, il suffit d'ajouter "/" à la fin du dossier nom:

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

Ensuite, actualisez votre console AWS, et vous verrez le dossier

9

Le AWS:S3 rails bijou fait en lui-même:

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

crée automatiquement les teaser et images « dossiers » si elles ne le font pas déjà exister.

16

Java avec AWS SDK:

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

  2. Si vous tentez de structurer votre compartiment s3, vos conventions de dénomination (les clés que vous attribuez à vos fichiers) peuvent simplement suivre les modèles de répertoire normaux, c'est-à-dire folder/subfolder/file.txt.

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

    Le storageBucket est le nom de votre seau, la prefix est la clé que vous souhaitez rechercher, et le delimiter est utilisé pour filtrer votre recherche basé sur l'prefix.

12

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 dans le 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" dans le sens où vous pouvez créer une structure de dossiers simulée sur le S3, mais encore une fois, vous devez créer des objets dans S3, pas des dossiers. En allant de pair, vous aurez besoin de la commande "put-object" pour créer cette structure de dossier simulée. Maintenant, pour utiliser cette commande, vous avez besoin des outils AWS CLI installés, rendez-vous ici AWS CLI Installation pour obtenir des 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 

Maintenant, la partie amusante de cette commande est, vous n'avez pas besoin d'avoir tous les « dossiers » (objets) créés avant d'exécuter cette commande.Cela signifie que vous pouvez avoir un "dossier" (objet) pour contenir des choses, mais ensuite vous pouvez utiliser cette commande pour créer la structure de dossier simulée dans ce "dossier" (objet) comme je l'ai déjà mentionné. Par exemple, j'ai un "dossier" (objet) nommé "importateur" dans mon compartiment S3, disons que je veux insérer sample.txt dans une structure "dossier" (objet) de l'année, du mois, puis un échantillon " dossier "(objet) dans tout cela. Si je n'ai que l'objet "importateur" dans mon compartiment, je n'ai pas besoin d'entrer auparavant 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 ceci:

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

La commande mis-objet sera ensuite et créer le chemin que je l'ai indiqué dans le drapeau --key. Voici un petit 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 omettant le drapeau --body, et en ne spécifiant pas de nom de fichier, et en laissant une barre oblique à la fin du chemin fourni dans le flag --key, le système crée la structure de dossier simulée souhaitée dans le compartiment S3 sans insérer un fichier dans le processus.

Espérons que cela vous aide à mieux comprendre le système. Remarque: une fois que vous avez créé une structure "dossier", vous pouvez utiliser la commande "sync" de S3 pour synchroniser le "dossier" descendant avec un dossier sur votre machine locale, ou même avec un autre compartiment S3.

+0

Je réalise que cette question est morte depuis longtemps, mais je n'ai jamais trouvé de réponse satisfaisante à cette question est arrivé à trouver la bonne terminologie et j'ai joué avec des scripts shell au point où j'ai compris comment faire cela. Donc, je voulais donner une vraie réponse à tous ceux qui ont besoin de savoir comment faire. – Jravict

+0

connexes (pour ceux qui s'interrogent sur les différents s3 cli disponibles, par exemple, .'s3' vs 's3api'): https://stackoverflow.com/a/26396150/127971 L'utilisation de' aws s3' peut être plus facile à installer et utiliser pour de nombreuses tâches, par exemple, pour copier tous les fichiers dans pwd local à distance: 'aws s3 sync. s3: // mon-seau ' – michael

+0

exemple de la CLI d'ajouter la barre oblique et laisser le corps:' aws s3api put-object --bucket my-bucket --key folder/' –

0

Vous pouvez sélectionner la langue de votre choix disponible AWS SDK

Sinon, vous pouvez essayer les bibliothèques clientes MINIO disponibles dans Python, Go, .Net, Java, Javascript pour votre environnement de développement d'applications, il a répertoire exemple avec toutes les opérations de base listé.

Disclaimer: Je travaille pour Minio

+0

malheureusement, vos exemples ne comprennent pas un exemple de création d'un dossier dans le cadre de la mise en place d'un objet ... –

5

Dans iOS (Objective-C), je ne suit ainsi

Vous pouvez ajouter ci-dessous le code pour créer un dossier dans un seau s3 amazone programme. Ceci est un 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"); 
     } 
    }]; 
} 
+0

Certaines explications en plus du code rendraient cette réponse plus utile. –

+0

@yogesh Dalavi ce code fonctionne. –

2

Pour Swift I a créé une méthode où l'on passe dans un 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

0

Dans rapide 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 
    }) 
} 
3

Avec aws cli, il est possible de copier un dossier entier à un seau.

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

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

+0

Pour moi, la clé était de mettre le nom du dossier dans la destination. – xdhmoore

0

crée ci-dessous un répertoire vide appelé « mydir1 ». Ci-dessous le code nodejs, il devrait être similaire pour les autres langues.

L'astuce consiste à avoir slash (/) à la fin du nom de l'objet, comme dans "mydir1 /", sinon un fichier avec 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

Questions connexes