tipos simple precios precio costo caracteristicas calculadora aws amazon-s3

amazon s3 - simple - Compruebe el tamaño del archivo en S3 sin descargarlo?



caracteristicas amazon s3 (9)

Tengo archivos de clientes cargados en Amazon S3, y me gustaría agregar una función para contar el tamaño de esos archivos para cada cliente. ¿Hay alguna manera de "echar un vistazo" al tamaño del archivo sin descargarlo? Sé que se puede ver desde el panel de control de Amazon, pero tengo que hacerlo pro gramaticalmente.


Envíe una solicitud HTTP HEAD al objeto. Una solicitud HEAD recuperará los mismos encabezados HTTP que una solicitud GET, pero no recuperará el cuerpo del objeto (lo que le ahorrará ancho de banda). A continuación, puede analizar el valor del encabezado Content-Length desde los encabezados de respuesta HTTP.


También puede hacer una lista de los contenidos del cubo. Los metadatos en la lista contienen los tamaños de archivo de todos los objetos. Así es como se implementa en AWS SDK para PHP .


Usando el consejo de Michael, mi código exitoso se veía así:

require ''net/http'' require ''uri'' file_url = MyObject.first.file.url url = URI.parse(file_url) req = Net::HTTP::Head.new url.path res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } file_length = res["content-length"]


Código PHP para verificar el tamaño del objeto s3 (o cualquier otro encabezado de objeto), observe el uso de stream_context_set_default para asegurarse de que solo utiliza una solicitud HEAD

stream_context_set_default( array( ''http'' => array( ''method'' => ''HEAD'' ) ) ); $headers = get_headers(''http://s3.amazonaws.com/bucketname/filename.jpg'', 1); $headers = array_change_key_case($headers); $size = trim($headers[''content-length''],''"'');


Solución Android

Integre aws sdk y obtendrá una solución bastante directa:

// ... put this in background thread List<S3ObjectSummary> s3ObjectSummaries; s3ObjectSummaries = s3.listObjects(registeredBucket).getObjectSummaries(); for (int i = 0; i < s3ObjectSummaries.size(); i++) { S3ObjectSummary s3ObjectSummary = s3ObjectSummaries.get(i); Log.d(TAG, "doInBackground: size " + s3ObjectSummary.getSize()); }

  • Aquí hay un enlace a la documentación oficial.
  • Es muy importante ejecutar el código en AsyncTask o cualquier otro medio para obtener una secuencia de fondo; de lo contrario, obtendrá una excepción para ejecutar la red en el hilo de la interfaz de usuario.

Hay una mejor solución.

$info = $s3->getObjectInfo($yourbucketName, $yourfilename); print $info[''size''];


AWS SDK para .NET ---- ListObjectsRequest y ListObjectsResponse

AmazonS3Client s3 = new AmazonS3Client(); SpaceUsed(s3, "putBucketNameHere"); static void SpaceUsed(AmazonS3Client s3Client, string bucketName) { ListObjectsRequest request = new ListObjectsRequest(); request.BucketName = bucketName; ListObjectsResponse response = s3Client.ListObjects(request); long totalSize = 0; foreach (S3Object o in response.S3Objects) { totalSize += o.Size; } Console.WriteLine("Total Size of bucket " + bucketName + " is " + Math.Round(totalSize / 1024.0 / 1024.0, 2) + " MB"); }


Node.js uno:

const AWS = require(''aws-sdk''); const s3 = new AWS.S3(); function sizeOf(key, bucket) { return s3.headObject({ Key: key, Bucket: bucket }) .promise() .then(res => res.ContentLength); } // A test sizeOf(''ahihi.mp4'', ''output'').then(size => console.log(size));

Doc está aquí .


Hago algo así en Python para obtener el tamaño acumulativo de todos los archivos con un prefijo dado:

import boto3 bucket = ''your-bucket-name'' prefix = ''some/s3/prefix/'' s3 = boto3.client(''s3'') size = 0 result = s3.list_objects_v2(Bucket=bucket, Prefix=prefix) size += sum([x[''Size''] for x in result[''Contents'']]) while result[''IsTruncated'']: result = s3.list_objects_v2( Bucket=bucket, Prefix=prefix, ContinuationToken=result[''NextContinuationToken'']) size += sum([x[''Size''] for x in result[''Contents'']]) print(''Total size in Gb: '' + str(size / (1000**3)))