如何将 S3 listObject 过滤到确定点? (与标记参数相反)
How to filter S3 listObject up to a determined point? (Opposite of Marker param)
我正在使用 AWS SDK 函数 listObject() 从给定的存储桶中检索对象。这些对象的路径中有一个 table 名称和时间戳,因此为了过滤响应,我使用了 Prefix 和 Marker:
但是,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);
});
});
});
我正在使用 AWS SDK 函数 listObject() 从给定的存储桶中检索对象。这些对象的路径中有一个 table 名称和时间戳,因此为了过滤响应,我使用了 Prefix 和 Marker:
但是,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);
});
});
});