2012-07-15 2 views
17

Je suis familier avec AWS Java SDK, j'ai également essayé de parcourir le Javadoc correspondant, mais je ne pouvais pas réaliser comment créer un sous-répertoire, à savoir, un répertoire objet dans un compartiment, et comment puis-je télécharger des fichiers.Amazon Web Services (AWS) S3 Java créer un sous-répertoire (objet)

On suppose bucketName et dirName correspondent au seau existant déjà (avec la permission du public) et un nouveau (objet) répertoire qui doit être créé dans le seau (c.-à-bucketName/rép /)

J'ai essayé ce qui suit:

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

qui déclenche une exception sur la deuxième ligne.

Un extrait court qui crée un sous-répertoire et télécharge des fichiers sur celui-ci sera grandement apprécié.

Répondre

29

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 les répertoires traditionnels en utilisant des recherches de préfixes. Par exemple, vous pouvez stocker les clés suivantes dans un seau:

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

puis effectuez une recherche de préfixe pour foo/ et vous récupérerez:

foo/bar1 
foo/bar2 
foo/bar3 

Voir AmazonS3.listObjects pour plus de détails.


Mise à jour: En supposant que vous avez déjà un seau existant, la clé sous ce seau 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/"); 
+0

$ Merci pour votre réponse, pourrait Formulez brièvement extrait de code? Puisque, comme vous le voyez dans mon article, j'ai essayé de créer quelque chose comme "foo/bar" mais cela crée une exception. – MrRoth

+0

@MrRoth: Voir ma mise à jour. – casablanca

18

S3 ne voit pas les répertoires comme nous le faisons traditionnellement 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 déjà dit que vous pouvez télécharger des fichiers à des répertoires comme celui-ci:

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

Lire tout le tutoriel here pour plus de détails, et la chose la plus importante Est-ce que vous trouverez des informations comment supprimer les répertoires.

+1

A travaillé comme un charme! – SexyBeast

0

si vous voulez créer un dossier, vous devez utiliser la commande mettre à l'aide des touches suivantes pour créer folder1 dans:

dans la racine du seau -> folder1/folder1_ $ dossier

$

dans le chemin dossier2/folder3/-> dossier2/folder3/dossier1/folder1_ dossier $

$ Il est toujours all_previous_folders/folderName/folderName_ dossier $

Questions connexes