2010-12-15 7 views
5

He visto preguntas anteriores sobre "Cómo encontrar el tamaño de un cubo S3 completo". Esta es una pregunta un tanto diferente, así que me disculpo por adelantado si es vaga. Haré todo lo posible para explicar lo que estoy tratando de lograr.Obtiene el tamaño de los archivos de manera dinámica en Amazon S3 Bucket

Actualmente estoy usando Amazon S3 PHP Class.

Esto es lo que yo estoy tratando de lograr:

  1. Me gustaría ser capaz de bucle a través de mi base de datos MySQL y obtener los nombres de archivo de archivos específicos en mi servidor S3. (Esto puede estar basado en el usuario).

  2. Durante el ciclo, consulte el cubo de Amazon S3 (de alguna manera) y obtenga el tamaño del archivo de cada archivo que estaba en mi bucle de MySQL.

  3. Sume todos los tamaños de archivo, para obtener un total de bytesize aproximado.

Así que, esencialmente, digamos que tengo un usuario que tiene 5 archivos en el cubo S3. ¿Cómo podría consultar el depósito S3 para ver cuántos datos están almacenando en mi cubo los 5 archivos de este usuario?

Mis disculpas si esto es difícil de entender. Puedo volver a articular, si es necesario.

Cualquier empujón en la dirección correcta sería muy apreciado.

Respuesta

11

Realmente debería almacenar el tamaño del archivo en su tabla Mysql. Más rápido para obtener la información, menos costo S3.

Pero ... prueba esto?

$info = $s3->getObjectInfo($bucketName, $filename); 
print $info['size']; 
+2

Upvote para". Deberías guardar el tamaño del archivo en tu tabla de Mysql " –

7

Ahora que AWS ha lanzado un SDK de soporte para PHP, es posible que desee considerar el mirar en la conmutación de usar que: http://aws.amazon.com/sdkforphp/.

También incluye api para obtener un tamaño de objeto: get_object_filesize().

Estoy de acuerdo con John Ventimiglia. Cada llamada a S3 lleva tiempo y cuesta dinero. Si puede almacenar la información localmente, proporcionará una mejor experiencia del cliente (más rápido) y será más barata.

+0

No tenía conocimiento del AWS PHP SDK. Tendré que jugar arou nd con eso. Ambos tienen razón al almacenar la información. Estoy en el proceso de almacenar localmente los tamaños de archivo. Muchas gracias. – Dodinas

1

Almaceno en mi MYSQL pero en algún momento debe hacer una limpieza y es bueno saber si hay algún desajuste entre su MSYQL y S3. Cuando necesito para obtener el tamaño del archivo que he lista de todos los archivos y contar el tamaño del archivo

include("sdk.class.php"); 

     $s3 = new AmazonS3(); 

     $response = $s3->list_objects('mojag'); 
     foreach ($response->body as $object) 
     { 
      //print_r($object); 
      echo $object->Key.'('.$object->Size.')</br>'; 
      $size = $size+$object->Size; 

     } 
     $size = number_format($size/1024/1024, 2); 

     echo $size; 
3

adición a chrisjmccreadie respuesta.

El método list_objects('') está paginado, lo que puede no proporcionar resultados superiores a 1000, ya que el valor predeterminado es 1000, por lo que deberá pasar por la paginación para obtener resultados completos y precisos.

Pero puede usar el método get_object_list() que devolverá el resultado max-keys.

include ("sdk.class.php ");

$s3 = new AmazonS3(); 

    $response = $s3->get_object_list('mojag'); 
    foreach ($response->body as $object) 
    { 
     //print_r($object); 
     echo $object->Key.'('.$object->Size.')</br>'; 
     $size = $size+$object->Size; 

    } 
    $size = number_format($size/1024/1024, 2); 

    echo $size; 
Cuestiones relacionadas