0

要使用 Boto 从 S3 中获取对象,您必须调用类似(至少这是我能找到的唯一记录方式):

key = bucket.get_key(some_id)
data = key.get_contents_as_string()

但是,get_key先执行 HEAD,然后get_contents_as_string执行 GET。这是非常低效的。我知道我从 S3 请求的东西几乎总是存在(除了最终的一致性之外,我在那里与几乎那里的比率是巨大的;数百万:1)。有什么方法可以绕过明显的 boto 调用要求get_key,直接跳转到“获取与此 id 关联的数据”?

4

2 回答 2

1

当然。

如果您知道密钥在那里,您可以像这样简单地创建一个 Key 对象:

key = bucket.new_key(some_id)
data = key.get_contents_as_string()

这将允许您跳过 HEAD 请求以检查密钥的存在。当然,如果密钥实际上不存在,这将产生 404 错误。

于 2013-05-11T00:27:41.757 回答
1

API 显示了用于直接实例化 Key 对象的类。

key = Key(bucket=bucket, name=my_key_id)
data = key.get_contents_as_string()

到目前为止,在我对 boto 的使用中,我发现文档是一个有用的介绍,但与生成的 API 文档相比非常不完整。

于 2013-05-11T00:36:28.553 回答