web-dev-qa-db-fra.com

OBTENIR la liste des objets situés sous un dossier S3 spécifique

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é.

8
appy

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

9
Abhyudit Jain

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")
                })
            }
        })
7
Amit Shakya

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'])        
}
3
Tobi