web-dev-qa-db-ja.com

特定のS3フォルダーの下にあるオブジェクトのリストを取得する

パラメーターとしてフォルダー名を取得し、Node JS aws-sdk

例: http:// localhost:3000/listobjects?foldername = xxx

この機能を実装する方法を提案してください。

8
appy

Aws-sdkでgetObjectまたはlistObjectsV2を呼び出しながらプレフィックスを指定できます

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
});

ちなみに、S3にはフォルダーがありません。これは単なるプレフィックスです。フォルダー構造が表示されるので、ファイルを簡単にナビゲートして表示できます。

ソース: AWS SDK Javascript

9
Abhyudit Jain

フォルダーをs3バケットに記載することを忘れてしまいましたが、とにかくこのコードは私にとってはうまくいきます

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

ループ内のインデックス= 1から開始すると、フォルダー自体が除外され、フォルダー内のファイルのみがリストされます。

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