web-dev-qa-db-fra.com

Comment obtenir la taille du fichier / clé dans boto S3?

Il doit y avoir un moyen facile d'obtenir la taille du fichier (taille de la clé) sans avoir à tirer sur un fichier entier. Je peux le voir dans les propriétés du navigateur AWS S3. Et je pense que je peux le retirer de l'en-tête "Content-length" d'une requête "HEAD". Mais je ne relie pas les points sur la façon de le faire avec boto. Félicitations supplémentaires si vous publiez un lien vers des exemples plus complets que dans les documents boto standard .

EDIT: Donc, ce qui suit semble faire l'affaire (bien qu'en regardant le code source, je ne suis pas complètement sûr.):

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

Pour l'instant, je laisse la question ouverte pour des commentaires, de meilleures solutions ou des pointeurs vers des exemples.

45
mjhm

Cela fonctionnerait:

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

La méthode de recherche effectue simplement une demande HEAD sur le compartiment pour le nom de clé afin qu'elle renvoie tous les en-têtes (y compris la longueur du contenu) pour la clé, mais ne transfère aucun du contenu réel de la clé.

Le tutoriel S l le mentionne mais pas très explicitement et pas dans ce contexte précis. Je vais ajouter une section à ce sujet pour faciliter la recherche.

Remarque: pour chaque ancien lien comme http://boto.cloudhackers.com/s3_tut.html qui renvoie un 404, ajoutez "/en/latest" juste après le ".com": http://boto.cloudhackers.com/en/latest/s3_tut.html. (Quelqu'un doit explorer mod_rewrite ...)

67
garnaat

dans boto:

s3.head_object exécute également une requête HEAD pour récupérer les métadonnées sur l'objet:

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

dans boto3 en utilisant une ressource S3:

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

Le head_object L'appel du client S3 m'a renvoyé un http "403 Forbidden"

8
oyophant

Dans Boto 3 :

En utilisant S3 Object, vous pouvez récupérer la taille du fichier (objet a.k.a) en octets. Il s'agit d'une ressource représentant l'objet Amazon S3.

En fait, vous pouvez obtenir toutes les métadonnées liées à l'objet. Comme content_length la taille de l'objet, content_language langue du contenu, content_encoding, last_modified, etc.

import boto3

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

Référence boto3 doc

1
satznova