我在自己的S3对象中存储了自定义元数据(我在元x-amz-metadata-description中存储了该文件的描述)。
我希望检索包含S3对象属性的文件列表,包括元数据。
我认为s3.listObjectsV2
可以帮助我,但似乎此方法无法检索元数据(请参阅官方文档here)
我看到我可以使用getObjects检索那些medata,但它会增加很多的调用次数和请求的延迟。
您是否有任何想法批量检索对象列表的元数据?
谢谢, 罗曼。
答案 0 :(得分:1)
您需要aws s3api head-object
才能完全符合您的要求
HEAD操作从对象检索元数据而不返回对象本身。如果您只对对象的元数据感兴趣,则此操作非常有用。要使用HEAD,您必须具有对该对象的READ访问权限。
aws s3api head-object --bucket <mybucket> --key <value>
它也可以在nodeJS API中使用,请参阅http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#headObject-property
每个键调用一次该方法,如果你需要调用多个项目,你需要用其他方法来解决这个问题,举个例子,你需要从你的存储桶中获取所有csv文件的所有元数据
aws s3 ls --recursive <mybucket> \
| grep ".csv$" | cut -c 32- \
| xargs -I {} aws s3api head-object --bucket <mybucket> --key {}
命令的第一部分列出了存储桶中的所有文件,只对特定扩展名进行grep,删除字符以便只得到密钥,并将此密钥作为head-object命令的参数传递
答案 1 :(得分:0)
S3不是为批量查询对象元数据而设计的。如果您的存储桶中的文件数量较少,则需要关注@FrédéricHenri的答案,否则您需要将元数据存储在其他数据存储中,例如DynamoDB,每当您将文件放入S3存储桶时,您都可以{{ 3}}将元数据复制到DynamoDB表,然后您可以以任何您想要的方式查询DynamoDB的元数据。