javascript - 如何过滤 S3 listObject 到一个确定的点?(与标记参数相反)
问题描述
我正在使用 AWS 开发工具包函数 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);
});
});
});
推荐阅读
- python - 在 Python 脚本中使用正则表达式
- asp.net - 在 ASP.NET Core 中结合使用 cookie 和令牌身份验证
- java - Simba][SpannerJDBCDriver](100300) 来自服务器的错误消息:INVALID_ARGUMENT:不支持位置参数
- java - 被覆盖的方法不会抛出异常(java 中的实现)
- javascript - 如何更快地加载谷歌地图图钉
- c# - 获取场景中所有按钮的名称并存储它们?
- proxy - HTTPoison sock5 代理
- typescript - 为什么我不能在 TS 中优化对象键?
- core-data - 崩溃核心数据 - NSCocoaErrorDomain Code=256
- java - Java优化私有方法