【问题标题】:S3 boto library: How to do a HEAD request on the Key in the bucketS3 boto 库:如何对存储桶中的密钥进行 HEAD 请求
【发布时间】:2017-05-23 19:35:18
【问题描述】:

我是 Boto 新手,在 python 中使用boto2.29.1

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

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

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

API 参考说通过对密钥执行 HEAD 请求来获取元数据。我该怎么做?

【问题讨论】:

  • 如果有人告诉我如何获取具有特定用户元数据的密钥而不是获取所有密钥然后过滤密钥,我将不胜感激
  • 如果您是新客户,我建议您使用 boto3。 (docs for head_object)

标签: python amazon-s3 boto


【解决方案1】:

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

您也可以通过S3.Object 上的load() 方法实现相同的目的:

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.

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

【讨论】:

    【解决方案2】:

    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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-27
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多