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

时间:2017-01-09 14:04:10

标签: python amazon-s3 boto

我是Boto的新手并在python中使用<DataGrid x:Name="grdResults" AutoGenerateColumns="False" ItemsSource="{Binding Results, Mode=TwoWay}"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Path=HomeTeam}" Header="Home Team"/> <DataGridTextColumn Binding="{Binding Path=VisitorTeam}" Header="Visitor Team"/> </DataGrid.Columns> </DataGrid>

使用boto2.29.1方法

添加了一些用户元数据

使用set_metadata方法列出s3存储桶中的所有键,然后迭代键。但它不会返回API reference

中定义的用户元数据

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

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

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

在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之类的信息,但是如果没有{,您将不会获得自定义元数据(即x-amz-meta-*键) {1}}-键。