パラメーターとしてフォルダー名を取得し、Node JS aws-sdk
例: http:// localhost:3000/listobjects?foldername = xxx
この機能を実装する方法を提案してください。
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
フォルダーを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")
})
}
})
ループ内のインデックス= 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'])
}