63

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

編集:それで、以下はトリックをするようです(ソースコードを見ると私は完全にはわかりませんが):

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

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

4

5 に答える 5

75

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

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

ルックアップメソッドは、キー名のバケットに対してHEADリクエストを実行するだけなので、キーのすべてのヘッダー(content-lengthを含む)を返しますが、キーの実際のコンテンツは転送しません。

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

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

于 2011-03-31T11:07:14.810 に答える
66

boto3で:

s3.head_objectまた、HEADリクエストを実行して、オブジェクトに関するメタデータを取得します。

s3 = boto3.client('s3')
response = s3.head_object(Bucket='bucketname', Key='keyname')
size = response['ContentLength']
于 2017-05-08T22:46:32.123 に答える
19

boto3S3リソースを使用する場合:

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

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

于 2018-11-05T17:33:30.380 に答える
18

ボト3で:

S3Objectを使用すると、ファイル(別名オブジェクト)のサイズをバイト単位でフェッチできます。これは、AmazonS3オブジェクトを表すリソースです。

実際、オブジェクトに関連するすべてのメタデータを取得できます。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ドキュメント

于 2019-05-24T15:04:12.767 に答える
5

複数のファイルをチェックする必要がある場合は、すべてのオブジェクトのリストを取得することもできます。特定のバケットを実行list_objects_v2してから、応答「コンテンツ」を繰り返し処理します。例えば:

s3_client = boto3.client('s3')
response_contents = s3_client.list_objects_v2(
        Bucket='name_of_bucket'
        ).get('Contents')

次のような辞書のリストが表示されます。

[{'Key': 'path/to/object1', 'LastModified': datetime, 'ETag': '"some etag"', 'Size': 2600, 'StorageClass': 'STANDARD'}, {'Key': 'path/to/object2', 'LastModified': 'datetime', 'ETag': '"some etag"', 'Size': 454, 'StorageClass': 'STANDARD'}, ... ]

リスト内の各ディクショナリには、特定のオブジェクトのサイズである「サイズ」キーが含まれていることに注意してください。反復可能です

for rc in response_contents:
    print(f"Size: {rc.get('Size')}")

興味があるかもしれないすべてのファイルのサイズを取得します。

Size: 2600
Size: 454
Size: 2600
...
于 2020-08-04T20:36:22.267 に答える