J'essaye d'obtenir une liste d'objets situés sous un dossier spécifique dans un compartiment S3 en utilisant une chaîne de requête qui prend le nom de dossier comme paramètre et liste tous les objets qui correspondent à ce dossier spécifique en utilisant Node JS aws-sdk
Par exemple: http: // localhost: 3000/listobjects? Foldername = xxx
Veuillez suggérer comment implémenter cette fonctionnalité.
Vous pouvez spécifier le préfixe lors de l'appel de getObject
ou listObjectsV2
dans aws-sdk
var params = {
Bucket: 'STRING_VALUE', /* required */
Prefix: 'STRING_VALUE' // Can be your folder name
};
s3.listObjectsV2(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Soit dit en passant, S3 n'a pas de dossiers. Ce n'est qu'un préfixe. Il vous montre la structure des dossiers pour vous faciliter la navigation et la visualisation des fichiers.
Source: AWS SDK Javascript
Vous oubliez de mentionner le dossier dans le seau s3, de toute façon ce code fonctionne pour moi
var params = {
Bucket:Bucket_Name,
Delimiter: '/',
Prefix: 'foldername/'
};
s3Bucket.listObjects(params, function(err, data) {
if (err) {
return 'There was an error viewing your album: ' + err.message
}else{
console.log(data.Contents,"<<<all content");
data.Contents.forEach(function(obj,index){
console.log(obj.Key,"<<<file path")
})
}
})
Commencer avec index = 1 dans la boucle exclut le dossier lui-même + liste simplement les fichiers dans le dossier:
const s3 = new AWS.S3();
const params = {
Bucket: bucketname,
Delimiter: '/',
Prefix: s3Folder + '/'
};
const data = await s3.listObjects(params).promise();
for (let index = 1; index < data['Contents'].length; index++) {
console.log(data['Contents'][index]['Key'])
}