S3 boto库:如何对存储桶中的Key进行HEAD请求

Son*_*han 5 python amazon-s3 boto

我是Boto的新手,并且boto2.29.1在python中使用。

使用set_metadata方法添加了一些用户元数据

列出s3存储桶中的所有键,bucket.list()方法是使用方法,然后遍历键。但它不会返回API参考中定义的用户元数据

但是使用bucket.get_key()返回元数据获取元数据

API参考说通过对密钥执行HEAD请求来获取元数据。我怎样才能做到这一点?

ini*_*_js 8

在 boto3 中,您可以使用该S3.Client.head_object()方法仅加载单个键的元数据。

load()您还可以通过以下方法实现相同的目的S3.Object

s3 = boto3.resource('s3')
object = s3.Object('bucket_name','key')

object.load()  # fetches metadata for the object, but not data.
               # calls client's head_object behind the scene

object.reload() # synonym for load().
                # apparently, we can never have enough duplicated methods.
Run Code Online (Sandbox Code Playgroud)

您还可以通过使用S3.Client.list_objects()列出存储桶中的键来访问关联数据的子集。在对 的响应中list_objects,您将获得存储类、大小、所有者和 Etag 等信息,但如果不使用-ing 键,您将无法获得自定义元数据(即x-amz-meta-*键) 。load()


Cip*_*agă 0

Boto 没有直接请求(至少在v2)。获取所有元数据的唯一方法是使用该bucket.get_key()方法。

如果您只需要某些键的元数据,那么您可以执行以下操作:

for key in bucket.list():
    if want_metadata(key.name):
        key_with_md = bucket.get_key(key.name)
        metadata = key_with_md.get_metadata('smth')
Run Code Online (Sandbox Code Playgroud)