首页 > 解决方案 > 如何过滤 S3 listObject 到一个确定的点?(与标记参数相反)

问题描述

我正在使用 AWS 开发工具包函数 listObject() 从给定存储桶中检索对象。这些对象的路径中有一个表名和时间戳,所以为了过滤响应,我使用了前缀和标记:

但是,Marker 确定从哪个对象开始,我需要相反:告诉查询在哪里停止。

s3.listObject({ Bucket: bucket, Prefix: table-name, Marker: `${table-name}/${timestamp}` });

桶的结构如下:

table-name/timestamp/uid

我想让所有对象达到但不包括时间戳。

编辑:我可以自己使用一些 javascript 来完成这项工作,但我想让查询为我完成这项工作。

标签: javascriptnode.jsamazon-s3aws-sdk-js

解决方案


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);
        });
    });
});

推荐阅读