2010-12-15 219 views
5

我在「如何查找整個S3存儲桶的大小」中看到過以前的問題。這是一個不同的問題 - 所以我提前道歉,如果它是模糊的。我會盡我所能解釋我正在努力實現的目標。我正在使用Amazon S3 PHP Class動態獲取Amazon S3存儲桶中文件的大小

這就是我想實現:

  1. 我希望能夠遍歷我的MySQL數據庫,並讓我的S3服務器上的文件的文件名特定。 (這可能基於用戶)。

  2. 在循環中,查詢Amazon S3存儲桶(以某種方式)並獲取我的MySQL循環中每個文件的文件大小。

  3. 將所有文件大小相加,得到一個總大小bytesize。

所以,基本上,假設我有一個用戶在S3存儲桶上有5個文件。我如何能夠查詢S3存儲桶,以查看此用戶的5個文件在我的存儲桶中存儲了多少數據?

我很抱歉,如果這很難理解。如果需要,我可以重新表達。

任何在正確的方向微調將不勝感激。

回答

11

你真的應該將文件大小存儲在你的Mysql表中。更快獲取信息,減少S3成本。

但是...試試這個嗎?

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

給予好評的。」你真的應該在你的Mysql表中存儲文件大小「 – 2014-02-25 16:04:25

7

現在AWS已經發布了一個支持PHP SDK,你可能要考慮尋找到切換到使用:http://aws.amazon.com/sdkforphp/

它還包括獲取對象大小的API:get_object_filesize()。

我同意約翰文蒂米利亞。每次打S3都需要時間和成本。如果您可以在本地存儲信息,它將提供更好的客戶體驗(更快)並且更便宜。

+0

我不知道AWS PHP SDK,我必須玩阿魯找到它。你對存儲信息都是正確的。我正在本地存儲文件大小的過程。非常感謝。 – Dodinas 2010-12-17 03:53:19

1

我確實存儲在我的MYSQL中,但有時您需要清理乾淨,並且很高興知道MSYQL和S3之間存在任何不匹配。當我需要的文件大小我列出所有的文件和統計文件大小

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

加成chrisjmccreadie答案。

方法list_objects('')分頁,可能不會提供超過1000的結果,因爲默認值爲1000,因此您需要通過分頁才能獲得完整的準確結果。

但是,您可以使用get_object_list()方法,它將返回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;