Amazon Web Services (AWS) S3 Java créer un sous-répertoire (objet)


Je connais AWS Java SDK, j'ai également essayé de parcourir le Javadoc correspondant, mais je n'ai pas pu réaliser comment créer un sous-répertoire, c'est-à-dire un objet de répertoire dans un compartiment, et comment y télécharger des fichiers.

Supposons que bucketName et dirName correspondent à un compartiment déjà existant (avec une autorisation publique) et à un nouveau répertoire (objet) qui doit être créé dans le compartiment (c'est-à-dire bucketName/dirName/)

J'ai essayé le suivant:

AmazonS3Client s3 = new AmazonS3Client(
    new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY));
s3.createBucket(bucketName + "/" + dirName); //throws exception

Qui lève une exception sur la deuxième ligne.

Un court extrait qui crée un sous-répertoire et y télécharge des fichiers sera profondément apprécié.

Author: MrRoth, 2012-07-15

3 answers

Il n'y a pas de "sous-répertoires" dans S3. Il y a des seaux et il y a des clés dans les seaux.

Vous pouvez émuler des répertoires traditionnels en utilisant des recherches de préfixe. Par exemple, vous pouvez stocker les clés suivantes dans un seau:

foo/bar1
foo/bar2
foo/bar3
blah/baz1
blah/baz2

Puis faites une recherche de préfixe pour foo/ et vous reviendrez:

foo/bar1
foo/bar2
foo/bar3

Voir AmazonS3.listObjects pour plus de détails.


Update: En supposant que vous avez déjà un compartiment existant, la clé sous ce compartiment contiendrait le /:

s3.putObject("someBucket", "foo/bar1", file1);
s3.putObject("someBucket", "foo/bar2", file2);
...

Ensuite, vous pouvez lister toutes les clés en commençant par foo/:

ObjectListing listing = s3.listObjects("someBucket", "foo/");
 33
Author: casablanca, 2012-07-15 12:47:33

S3 ne voit pas les répertoires de la manière traditionnelle que nous faisons sur nos systèmes d'exploitation. Voici comment vous pouvez créer un répertoire:

public static void createFolder(String bucketName, String folderName, AmazonS3 client) {
    // create meta-data for your folder and set content-length to 0
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentLength(0);

    // create empty content
    InputStream emptyContent = new ByteArrayInputStream(new byte[0]);

    // create a PutObjectRequest passing the folder name suffixed by /
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,
                folderName + SUFFIX, emptyContent, metadata);

    // send request to S3 to create folder
    client.putObject(putObjectRequest);
}

Comme casablanca l'a déjà dit, vous pouvez télécharger des fichiers dans des répertoires comme celui-ci:

s3.putObject("someBucket", "foo/bar1", file1);

Lisez tout le tutoriel ici pour plus de détails, et la chose la plus importante est que vous trouverez des informations sur la façon de supprimer les répertoires.

 21
Author: filip_j, 2014-10-17 09:33:55

Si vous souhaitez créer un dossier, vous devez utiliser la commande put en utilisant les clés suivantes pour créer folder1 dans:

Dans la racine de seau -> dossier1/folder1_$dossier$

Dans le chemin d'accès dossier2/dossier3/ -> dossier2/dossier3/dossier1/folder1_$dossier$

, Il est toujours all_previous_folders/nomdossier/folderName_$dossier$

 0
Author: Panuf, 2017-05-26 11:22:47