我正在尝试使用查询字符串获取位于S3存储桶中特定文件夹下的对象列表,该查询字符串将foldername作为参数并使用Node JS aws -sdk列出与该特定文件夹匹配的所有对象
例如:http://localhost:3000/listobjects?foldername=xxx
请建议如何实施此功能。
答案 0 :(得分:5)
您可以在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没有文件夹。它只是一个前缀。它会向您显示文件夹结构,以便您轻松浏览和查看文件。
答案 1 :(得分:5)
您忘了在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")
})
}
})
答案 2 :(得分:1)
从循环中的index = 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'])
}