2011-03-15 34 views
31

必须有一种简单的方法,而不将在整个文件来获得文件大小(密钥大小)。我可以在AWS S3浏览器的属性中看到它。我想我可以将它从“HEAD”请求的“Content-length”标题中取出。但是我没有把关于如何与博托做到这一点的小点联系起来。额外的荣誉,如果你发布一个链接到一些更全面的例子比都在standard boto docs我如何在博托S3文件/密钥大小?

编辑:所以下面似乎这样的伎俩(虽然从看源代码,我不能完全肯定。):

bk = conn.get_bucket('my_bucket_name') 
ky = boto.s3.key.Key(bk) 
ky.open_read() ## This sends a GET request. 
print ky.size 

现在我会留下公开征求意见的问题,更好地解决方案或指向示例的指针。

回答

56

这会工作:

bk = conn.get_bucket('my_bucket_name') 
key = bk.lookup('my_key_name') 
print key.size 

查找方法根本上水桶的键名HEAD请求,因此将返回所有的头文件(包括内容长度)为重点,但不会转移密钥的任何实际内容。

S3 tutoria升在这方面确切提到了这一点,但也不是很明确的,而不是。我将在此添加一节以帮助更容易找到。

注意:对于像http://boto.cloudhackers.com/s3_tut.html这样的返回404的每个旧链接,请在".com"之后加"/en/latest"http://boto.cloudhackers.com/en/latest/s3_tut.html。 (需要有人探索的mod_rewrite ...)

+2

感谢您的响应和显影博托在第一位。没有它,我会撕掉我的头发。 – mjhm 2011-04-01 00:49:37

+9

新文档建议使用bk.get_key代替bk.lookup – DanJ 2011-09-20 11:43:13

+1

我也建议检查“如果关键是无”之首。 – meawoppl 2015-06-03 19:13:22

7

boto3

s3.head_object还执行HEAD请求来检索元数据关于对象:

s3 = boto3.client('s3') 
response = s3.head_object(Bucket='bucketname', Key='keyname') 
size = response['ContentLength']