web-dev-qa-db-ja.com

boto S3でファイル/キーサイズを取得するにはどうすればよいですか?

ファイル全体をプルオーバーせずにファイルサイズ(キーサイズ)を取得する簡単な方法が必要です。 AWS S3ブラウザーのプロパティで確認できます。そして、「HEAD」リクエストの「Content-length」ヘッダーから取得できると思います。しかし、私はこれをボトで行う方法についての点をつなげていません。 標準のboto docs にあるよりも包括的な例へのリンクを投稿した場合の追加の称賛。

編集:だから、次のトリックを行うようです(ソースコードを見てから私は完全にはわからない)。

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

今のところ、コメント、より良い解決策、または例へのポインタのために、質問を開いたままにします。

45
mjhm

これはうまくいくでしょう:

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

ルックアップメソッドは、キー名のバケットでHEAD要求を行うため、キーのすべてのヘッダー(コンテンツの長さを含む)が返されますが、実際のコンテンツは転送されません。キー。

S3 tutoria lはこれに言及していますが、あまり明確ではなく、この正確なコンテキストではありません。見つけやすくするために、このセクションを追加します。

注:404を返すhttp://boto.cloudhackers.com/s3_tut.htmlのような古いリンクごとに、"/en/latest"の直後に".com"を追加します:http://boto.cloudhackers.com/en/latest/s3_tut.html。 (誰かがmod_rewriteを探索する必要があります...)

67
garnaat

in boto

s3.head_objectは、オブジェクトに関するメタデータを取得するためにHEAD要求も実行します。

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

boto3 S3リソースを使用:

boto3.resource('s3').Bucket(bucketname).Object(keyname).content_length

head_object S3クライアントの呼び出しにより、http "403 Forbidden"が返されました。

8
oyophant

InBoto 3

S3 Objectを使用すると、ファイル(オブジェクト)のサイズをバイト単位で取得できます。これは、Amazon S3オブジェクトを表すリソースです。

実際、オブジェクトに関連するすべてのメタデータを取得できます。お気に入り content_lengthオブジェクトサイズ、content_languageコンテンツの言語、content_encodinglast_modifiedなど.

import boto3

s3 = boto3.resource('s3')
object = s3.Object('bucket_name','key')
file_size = object.content_length //size in bytes

参照 boto3 doc

1
satznova