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é.
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/");
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.
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$