2010-12-15 13 views
5

Widziałem poprzednie pytania na temat "Jak znaleźć rozmiar całego wiadra S3." Jest to nieco inne pytanie - więc z góry przepraszam, jeśli jest niejasne. Zrobię co w mojej mocy, aby wyjaśnić, co próbuję osiągnąć.Dynamicznie uzyskać rozmiar plików w Amazon S3 Bucket

Obecnie używam Amazon S3 PHP Class.

To co próbuję osiągnąć:

  1. Chciałbym móc pętli mojej bazy danych MySQL i uzyskać konkretne nazw plików na moim serwerze S3. (Może to być oparte na użytkowniku).

  2. Podczas pętli zapytaj o wiadro Amazon S3 (w jakiś sposób) i pobierz pliki każdego pliku, który był w mojej pętli MySQL.

  3. Dodaj wszystkie pliki, aby uzyskać jedną całkowitą przybliżoną liczbę bajtów.

Tak więc, powiedzmy, mam użytkownika, który ma 5 plików na wiadrze S3. Jak mogę zapytać o wiadro S3, aby sprawdzić, ile danych przechowywanych jest w moim segmencie 5 plików tego użytkownika?

Moje przeprosiny, jeśli jest to trudne do zrozumienia. W razie potrzeby mogę ponownie wyrazić.

Każde uderzenie w odpowiednim kierunku zostanie bardzo docenione.

Odpowiedz

11

Naprawdę powinieneś przechowywać pliki w twojej tabeli Mysql. Szybciej, aby uzyskać informacje, mniej kosztów S3.

Ale ... spróbuj tego?

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

upvote za". Naprawdę powinieneś przechowywać plik w tabeli Mysql " –

7

teraz, że AWS wydała SDK wsparcie PHP, może warto rozważyć patrząc na przejście do korzystania z tego: http://aws.amazon.com/sdkforphp/.

Zawiera również api do pobierania rozmiaru obiektu: get_object_filesize().

Zgadzam się z Johnem Ventimiglia. Każde połączenie z S3 zabiera czas i kosztuje pieniądze. Jeśli możesz przechowywać informacje lokalnie, zapewni to lepszą obsługę klienta (szybciej) i będzie tańsza.

+0

Nie wiedziałem o AWS PHP SDK. Będę musiał grać i z nim. Oboje macie rację, jeśli chodzi o przechowywanie informacji. Jestem w trakcie lokalnego przechowywania plików. Wielkie dzięki. – Dodinas

1

Mam przechowywać w moim MySQL, ale czasami trzeba zrobić porządek i dobrze jest znać wszelkie niezgodności między MSYQL i S3. Kiedy trzeba uzyskać rozmiaru pliku listę wszystkich plików i liczyć rozmiar pliku

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

Dodawanie do chrisjmccreadie odpowiedź.

Metoda list_objects('') jest podzielona na strony, która może nie dawać wyników większych niż 1000, ponieważ wartość domyślna to 1000, więc aby uzyskać dokładne wyniki, należy przejść do stronicowania.

Ale możesz użyć metody get_object_list(), która zwróci wynik 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; 
Powiązane problemy