检索S3对象元数据的最佳方法(NodeJS API)

时间:2016-10-05 07:04:07

标签: amazon-web-services amazon-s3 aws-sdk

我在自己的S3对象中存储了自定义元数据(我在元x-amz-metadata-description中存储了该文件的描述)。

我希望检索包含S3对象属性的文件列表,包括元数据。

我认为s3.listObjectsV2可以帮助我,但似乎此方法无法检索元数据(请参阅官方文档here

我看到我可以使用getObjects检索那些medata,但它会增加很多的调用次数和请求的延迟。

您是否有任何想法批量检索对象列表的元数据?

谢谢, 罗曼。

2 个答案:

答案 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的元数据。