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.
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.
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
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
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+'/'))
Ajoutez "_ $ folder $" à votre nom de dossier et appelez put.
String extension = "_$folder$";
s3.putObject("MyBucket", "MyFolder"+ extension, new ByteArrayInputStream(new byte[0]), null);
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)
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
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) {});
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
.
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.