我正在尝试使用以文件夹名称作为参数的查询字符串获取位于 S3 存储桶中特定文件夹下的对象列表,并使用 Node JS aws-sdk 列出与该特定文件夹匹配的所有对象
例如:http://localhost:3000/listobjects?foldername=xxx
请建议如何实现此功能。
我正在尝试使用以文件夹名称作为参数的查询字符串获取位于 S3 存储桶中特定文件夹下的对象列表,并使用 Node JS aws-sdk 列出与该特定文件夹匹配的所有对象
例如:http://localhost:3000/listobjects?foldername=xxx
请建议如何实现此功能。
您可以在 aws-sdk 中调用getObject
or时指定前缀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 没有文件夹。它只是一个前缀。它向您显示文件夹结构,以便您轻松浏览和查看文件。
您忘记将文件夹提及到 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")
})
}
})
从循环中的 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'])
}
AWS s3 提供最多 1000 个文件列表,以便获得超过 1000 个计数使用此方法
export function getListingS3(prefix) {
return new Promise((resolve, reject) => {
try {
let params = {
Bucket: AWS_S3.BUCKET_NAME,
MaxKeys: 1000,
Prefix: prefix,
Delimiter: prefix
};
const allKeys = [];
listAllKeys();
function listAllKeys() {
s3.listObjectsV2(params, function (err, data) {
if (err) {
reject(err)
} else {
var contents = data.Contents;
contents.forEach(function (content) {
allKeys.push(content.Key);
});
if (data.IsTruncated) {
params.ContinuationToken = data.NextContinuationToken;
console.log("get further list...");
listAllKeys();
} else {
resolve(allKeys);
}
}
});
}
} catch (e) {
reject(e);
}
});
}```