我正在使用AWS SDK函数listObject()从给定存储桶中检索对象。对象在其路径中有一个表名和时间戳,因此为了过滤响应,我使用的是前缀和标记:
但是,Marker确定要从哪个对象开始,我需要相反:告诉查询在哪里停止。
s3.listObject({ Bucket: bucket, Prefix: table-name, Marker: `${table-name}/${timestamp}` });
桶的结构如下:
table-name/timestamp/uid
我想获取所有对象但不包括时间戳。
编辑:我可以使用一些javascript自己做,但我想让查询为我做的工作。
AWS似乎没有本机支持,考虑到Marker和ContinuationToken如何工作,这是有道理的,除非AWS添加了这个,未来有这个问题的人将不得不使用JS-it:
s3.listObjectV2({ Bucket: bucket, Prefix: table-name }).promise()
.then(response => {
return response.Contents.map(item => item.Key)
.filter(obj => {
let objTimestamp = obj.match(/\/(.*)\//)[1];
return new Date(timestamp) > new Date(objTimestamp);
});
});
});