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.¿Comprueba el tamaño del archivo en S3 sin descargarlo?
Respuesta
Enviar un HTTP HEAD solicitud 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 depósito. Los metadatos en la lista contienen los tamaños de archivo de todos los objetos. Así es como se implementa en el AWS SDK for PHP.
Consejo de utilización de Michael, mi código de éxito era la siguiente:
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 comprobar el tamaño del objeto s3 (o cualquier otro cabeceras de objetos), observe el uso stream_context_set_default para asegurarse de que sólo se utiliza una petición 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
Integrar aws sdk y se obtiene una solución recta hacia adelante más o menos:
// ... 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 documentation oficial.
- Muy importante para 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 for .NET ---- ListObjectsRequest & 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 es here.
hago algo como esto en Python para obtener el tamaño acumulado 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)))
- 1. ¿Cómo saber el tamaño de un archivo antes de descargarlo?
- 2. Compruebe si existe el archivo web, sin descargarlo?
- 3. Cambie el nombre del archivo pdf para descargarlo en vuelo
- 4. Uso de WinInet para identificar el tamaño total del archivo antes de descargarlo
- 5. ¿Cómo obtengo el tamaño del archivo/clave en el boto S3?
- 6. ¿Cuál es el tamaño del montón del Samsung Galaxy S3?
- 7. Obtener tamaño del archivo de imagen antes de descargarlo de la web
- 8. Eliminar rama TFS sin necesidad de descargarlo
- 9. tamaño del archivo en Haskell
- 10. Comprueba si NSURL es el archivo local
- 11. Tamaño del archivo cargado
- 12. Comprueba si el archivo es un archivo multimedia en C#
- 13. PHP: Tamaño de archivo remoto sin descargar el archivo
- 14. Determinación del tamaño del archivo en VB.NET
- 15. ¿Cómo optimizar el tamaño del archivo PDF?
- 16. Obtener el tamaño del archivo en el disco
- 17. Sin conexión Amazon S3
- 18. ¿Cómo obtener el tamaño de archivo desde el lado del cliente sin usar activex en javascript?
- 19. Amazon S3 SDK: ¿Cambiar el nombre del archivo al descargar?
- 20. Ver un archivo PDF en HTML para no descargarlo
- 21. Reducir el tamaño del archivo de pdf
- 22. Cómo representar visualmente el tamaño del archivo
- 23. NSFileManager - Comprobar el tamaño del archivo?
- 24. Reducir el tamaño del archivo jar externo
- 25. Cómo obtener el tamaño del archivo HttpPostedFileBase
- 26. Amazon S3. Tamaño máximo de objeto
- 27. Cómo transferir un archivo de URL a Amazon S3
- 28. Archivo duplicado en Amazon S3
- 29. Limitar el tamaño del archivo en el repositorio de git
- 30. Administrar tamaño del archivo .git
¿Ha probado una petición HEAD en lugar de un GET? – Nick
¿Podría publicar lo que fue su solicitud 'HEAD', por favor? También estoy tratando de hacer esto y no estoy seguro de cómo hacer esto –