python - example - ¿Cómo obtengo el tamaño del archivo/clave en boto S3?
python s3 bucket (2)
Esto funcionaría:
bk = conn.get_bucket(''my_bucket_name'')
key = bk.lookup(''my_key_name'')
print key.size
El método de búsqueda simplemente hace una solicitud HEAD en el depósito para el nombre de clave, por lo que devolverá todos los encabezados (incluida la longitud del contenido) de la clave, pero no transferirá el contenido real de la clave.
La tutoría S3 menciona esto pero no muy explícitamente y no en este contexto exacto. Agregaré una sección sobre esto para ayudar a que sea más fácil de encontrar.
Nota: por cada enlace antiguo como http://boto.cloudhackers.com/s3_tut.html
que devuelve un 404, agregue "/en/latest"
justo después del ".com"
: http://boto.cloudhackers.com/en/latest/s3_tut.html
. (Alguien necesita explorar mod_rewrite ...)
Debe haber una manera fácil de obtener el tamaño del archivo (tamaño de la clave) sin pasar un archivo completo. Puedo verlo en las Propiedades del navegador AWS S3. Y creo que puedo sacarlo del encabezado "Content-length" de una solicitud "HEAD". Pero no estoy conectando los puntos sobre cómo hacer esto con boto. Felicitaciones extra si publica un enlace a algunos ejemplos más completos que los que se encuentran en los documentos boto estándar .
EDITAR: Así que lo siguiente parece ser el truco (aunque al mirar el código fuente no estoy del todo seguro):
bk = conn.get_bucket(''my_bucket_name'')
ky = boto.s3.key.Key(bk)
ky.open_read() ## This sends a GET request.
print ky.size
Por ahora dejaré la pregunta abierta para comentarios, mejores soluciones o consejos para ejemplos.
en boto3 :
s3.head_object
también realiza una solicitud HEAD para recuperar los metadatos sobre el objeto:
s3 = boto3.client(''s3'')
response = s3.head_object(Bucket=''bucketname'', Key=''keyname'')
size = response[''ContentLength'']