2010-12-15 37 views
5

「S3バケット全体のサイズを見つける方法」に関する以前の質問があります。これは多少異なる疑問です。あいまいな場合は事前にお詫びします。私は達成しようとしていることを説明するために最善を尽くします。Amazon S3バケット内のファイルのサイズを動的に取得

私は現在Amazon S3 PHP Classを使用しています。

これは私が達成しようとしているものです:

  1. 私はMySQLデータベースをループすることができ、私のS3サーバ上のファイルの特定のファイル名を取得したいと思います。 (これはユーザーに基づいている可能性があります)。

  2. ループ中にAmazon S3バケットを照会して(何とか)MySQLのループにあった各ファイルのファイルサイズを取得します。

  3. すべてのファイルサイズを合計して、1つの合計の近似バイトサイズを取得します。

つまり、S3バケットに5つのファイルを持つユーザーがいるとします。このユーザーの5つのファイルがバケットにどれだけのデータを格納しているかを確認するには、どのようにS3バケットに問い合わせることができますか?

これがわかりにくい場合は、お詫び申し上げます。私は、必要に応じて再明言することができます。

正しい方向の任意の軽い動きがあれば幸いです。

答えて

11

実際には、ファイルサイズをMysqlテーブルに格納する必要があります。より速く情報を取得し、S3コストを削減します。

しかし...これを試してください。 http://aws.amazon.com/sdkforphp/

今AWSがサポートPHP SDKをリリースしたことを
$info = $s3->getObjectInfo($bucketName, $filename); 
print $info['size']; 
+2

Upvoteため。"あなたは本当にあなたのMysqlテーブルにファイルサイズを格納する必要があります。 " –

7

、あなたはそれを使用するように切り替えを検討して検討する必要があります。

オブジェクトサイズを取得するためのAPI:get_object_filesize()も含まれています。

私はJohn Ventimigliaに同意します。 S3への各呼び出しには時間とコストがかかります。情報をローカルに保存することができれば、より優れたカスタマーエクスペリエンス(より速く)を提供し、安価になります。

+0

私はAWS PHP SDKを認識していませんでした。それと一緒にnd。あなたは両方の情報を格納する権利です。私はファイルサイズをローカルに保存しています。どうもありがとう。 – Dodinas

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 ");

2015年に
$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;