javascript - 如何按创建日期从 AWS S3 查询项目
我想根据添加到 S3 的日期/时间,从存储桶中的特定子目录查询项目。我一直找不到关于这方面的明确文档,所以我想知道该如何实现?
我想要执行的查询类型看起来像这样...
- 返回 S3 存储桶
images下目录images/user1/中最近创建的文件的 URL - 返回在 S3 存储桶
images的目录images/user1下,于日期时间X与日期时间Y之间创建的所有项目的 URL
答案#1
更新 2019/3/19
显然 s3api 允许你很容易地做到这一点
一个解决方案可能是使用 s3api。如果你的对象少于1000个,它使用起来很容易,否则你需要处理分页。
s3api 可以列出所有对象,并且有一个属性用于查看导入到 s3 的键的 lastmodified 属性。然后可以对其进行排序,查找某个日期之后或之前的文件,或者匹配某个日期...
运行此类选项的示例
指定日期的所有文件
DATE=$(date +%Y-%m-%d) aws s3api list-objects-v2 --bucket test-bucket-fh \ --query "Contents[?contains(LastModified, \`$DATE\`)]"某日期之后的所有文件
YESTERDAY=`date -d '-1 day' +%F` aws s3api list-objects-v2 --bucket test-bucket-fh \ --query "Contents[?LastModified > \`$YESTERDAY\`]"
s3api 将返回一些元数据,以便您可以筛选特定元素
DATE=$(date +%Y-%m-%d)
aws s3api list-objects-v2 --bucket test-bucket-fh \
--query "Contents[?contains(LastModified, \`$DATE\`)].Key"
旧答案
AWS-SDK/CLI 确实应该实现某种 按日期检索 的标志,这会让生活更 轻松 和 更便宜。
如果您没有在文件名前加上日期或标签,您也可能想尝试使用该标志
--start-after (string)
如果您知道要开始列出的最新文件,可以使用 list-objects-v2 命令并加上 --start-after 标志。
"StartAfter 是您希望 Amazon S3 开始列出的位置。Amazon S3 会在此指定的键之后开始列出。StartAfter 可以是存储桶中的任意键"
所以 --start-after 会持续获取你的对象,因此如果你想限制项目数量,可以尝试指定 --max-items 标志。
https://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects-v2.html
答案#2
S3 可以 列出 存储桶中的所有对象,或者列出具有特定前缀(例如“目录”)的所有对象。然而,这不是一个廉价的操作,它肯定不是为在每个请求中执行而设计的。
一般来说,对于这个问题,使用数据库层是最合适的。它可以是轻量且快速的(比如 redis),但你应该清楚自己有哪些对象,以及在特定请求中需要哪个对象。
你可以通过复制对象两次来某种程度上作弊——例如,images/latest.jpg 或 images/user1/latest.jpg。但在“日期查询”的例子中,你肯定应该在 S3 外部执行此操作。
