2010-12-15 6 views
5

J'ai déjà vu des questions sur "Comment trouver la taille d'un compartiment S3 entier". C'est une question quelque peu différente - alors je m'excuse d'avance si c'est vague. Je ferai de mon mieux pour expliquer ce que j'essaie d'accomplir.Taille dynamique des fichiers dans le compartiment Amazon S3

J'utilise actuellement Amazon S3 PHP Class.

C'est ce que je suis en train de réaliser:

  1. Je voudrais pouvoir faire une boucle dans ma base de données MySQL et d'obtenir les noms de fichiers de fichiers spécifiques sur mon serveur S3. (Cela peut être basé sur l'utilisateur).

  2. Pendant la boucle, interrogez le compartiment Amazon S3 (en quelque sorte) et récupérez la taille de chaque fichier qui était dans ma boucle MySQL.

  3. Additionnez tous les fichiers, pour obtenir un total approximatif de bytesize.

Donc, essentiellement, disons que j'ai un utilisateur qui a 5 fichiers sur le compartiment S3. Comment puis-je être en mesure d'interroger le compartiment S3, pour voir combien de données les fichiers de cet utilisateur stockent dans mon compartiment? Mes excuses si cela est difficile à comprendre.

Je peux ré-articuler, si nécessaire.

Tout nudge dans la bonne direction serait grandement apprécié.

Répondre

11

Vous devriez vraiment stocker la taille de fichier dans votre table Mysql. Plus vite pour obtenir l'info, moins le coût S3.

Mais ... essayez ceci?

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

Upvote pour." Vous devriez vraiment stocker la taille de fichier dans votre table Mysql " –

7

Maintenant que AWS a publié un SDK PHP support, vous voudrez peut-être envisager de regarder dans le passage à l'utiliser: http://aws.amazon.com/sdkforphp/.

Il inclut également une API pour obtenir une taille d'objet: get_object_filesize().

Je suis d'accord avec John Ventimiglia. Chaque appel à S3 prend du temps et coûte de l'argent. Si vous pouvez stocker l'information localement, cela offrira une meilleure expérience client (plus rapide) et sera moins cher.

+0

Je n'étais pas au courant de l'AWS PHP SDK. avec lui. Vous avez tous les deux raison de stocker l'information. Je suis en train de stocker localement les filesizes. Merci beaucoup. – Dodinas

1

Je stocke dans mon MYSQL mais parfois vous devez faire le ménage et il est bon de savoir toute discordance entre votre MSYQL et S3. Quand j'ai besoin pour obtenir la taille du fichier, je liste tous les fichiers et compter la taille du fichier

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

Ajout à chrisjmccreadie réponse.

La méthode list_objects('') est paginée ce qui peut ne pas donner de résultats supérieurs à 1000, la valeur par défaut étant 1000, vous devrez donc effectuer une pagination pour obtenir des résultats précis.

Mais vous pouvez utiliser la méthode get_object_list() qui renverra le résultat 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; 
Questions connexes