web-dev-qa-db-fra.com

Amazon S3 boto - comment créer un dossier?

Comment créer un dossier sous un compartiment à l'aide de la bibliothèque boto pour Amazon s3?

J'ai suivi le manuel et créé les clés avec permission, métadonnées, etc., mais il n'y a aucune indication dans la documentation de boto qui explique comment créer des dossiers sous un compartiment, ou créer un dossier sous des dossiers dans un compartiment.

108
vito huang

Il n'y a pas de concept de dossiers ou de répertoires dans S3. Vous pouvez créer des noms de fichiers comme "abc/xys/uvw/123.jpg", auquel de nombreux outils d’accès S3 tels que S3Fox se présente comme une structure de répertoires, mais il s’agit en réalité d’un fichier unique dans un compartiment.

123
user240469

Supposons que vous vouliez créer le dossier abc/123/dans votre seau, c'est du gâteau avec Boto

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

Ou utilisez le console

47
TomNg

Avec AWS SDK .Net fonctionne parfaitement, ajoutez simplement "/" à la fin de la chaîne du nom du dossier:

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

18
elranu

Utilisez ceci:

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+'/'))
8
Reza Amya

Ajoutez "_ $ folder $" à votre nom de dossier et appelez put.

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

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

8
Mamad Asgari

Mise à jour pour 2019, si vous souhaitez créer un dossier avec le chemin nom_bucket/folder1/folder2, vous pouvez utiliser ce code:

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)
3
Ilya Vinnichenko

C'est vraiment facile de créer des dossiers. En fait, il ne s'agit que de créer des clés.

Vous pouvez voir mon code ci-dessous que je créais un dossier avec utc_time comme nom.

Ne pas oublier se termine la clé avec '/' comme ci-dessous, cela indique que c'est une clé:

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
Gabriel Wu

Bien que vous puissiez créer un dossier en ajoutant "/" à votre nom de dossier. Sous le capot, S3 maintient une structure plate contrairement à votre NFS habituel.

 var params = {
 Bucket: bucketName, 
 Clé: folderName + "/"[____.]}; 
 s3.putObject (params, function ( err, data) {}); 
1
vpage

S3 n'a pas de structure de dossier, mais il existe quelque chose appelé clé.

Nous pouvons créer /2013/11/xyz.xls et seront affichés sous forme de dossier dans la console. Mais la partie stockage de S3 prendra cela comme nom de fichier.

Même lors de la récupération, nous observons que nous pouvons voir les fichiers dans un dossier particulier (ou des clés) en utilisant la méthode ListObjects et en utilisant le paramètre Prefix.

1
Balaram

Apparemment, vous pouvez maintenant créer des dossiers dans S3. Je ne sais plus depuis quand, mais j'ai un compartiment dans la zone "Standard" et je peux choisir Créer un dossier dans la liste déroulante Action.

0
Perelx