web-dev-qa-db-fra.com

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

Je connais bien AWS Java SDK . J’ai également essayé de parcourir le Javadoc correspondant, mais je ne pouvais pas comprendre comment créer un sous-répertoire, c’est-à-dire un objet de répertoire dans un J'y télécharge 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é ce qui suit:

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

qui jette 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 grandement apprécié.

20
MrRoth

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

Vous pouvez émuler des répertoires traditionnels à l'aide de recherches de préfixes. Par exemple, vous pouvez stocker les clés suivantes dans un compartiment:

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

puis faites une recherche de préfixe pour foo/ et vous obtiendrez:

foo/bar1
foo/bar2
foo/bar3

Voir AmazonS3.listObjects pour plus de détails.


Update: En supposant que vous ayez 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 commençant par foo/:

ObjectListing listing = s3.listObjects("someBucket", "foo/");
34
casablanca

S3 ne voit pas les répertoires de la même manière que nous le 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 l'intégralité du tutoriel ici pour plus de détails, et le plus important, c'est que vous trouverez des informations sur la suppression des répertoires. 

22
filip_j

si vous voulez créer un dossier, vous devez utiliser la commande put en utilisant les touches suivantes pour créer folder1 dans:

à la racine du compartiment -> folder1/folder1_ $ folder $

dans chemin folder2/folder3/-> folder2/folder3/folder1/folder1_ $ folder $

C'est toujours all_previous_folders/folderName/folderName_ $ folder $

0
Panuf