2012-03-27 25 views
1

私がしたいのは、Amazon S3バケット内の特定のフォルダ内のサブフォルダ内のサブフォルダのサイズを確認したいのですvbを使用します。Amazon S3バケット内のフォルダのサブフォルダのサイズを確認する方法

これが可能な場合は、リンクやヘルプが適切に表示されます。

+0

S3はフラットです。フォルダはありません。本当に長い名前のファイルと、フォルダを持つように見える区切り文字です。共通の接頭辞を付けて保存されているすべてのオブジェクトのサイズを調べたいですか?例えば/ ram/files/*? – Mike

+0

ok私はamazon S3にはあまりよく慣れていませんが、これが問題なのです。あたかもRamがバケツの名前で、ファイルがその中にあるかのように、ファイルの最大サイズを取得して制限することが可能です... –

答えて

2

記事Beginning with Amazon S3はあなたのための良い出発点です。 listObjectメソッドを参照するコードビットは、必要なものの99%を実行しています(特定の接頭辞を持つすべてのファイルを取得しています)。ビットを追加して、それぞれのファイルサイズを調べて、それらを追加するだけです。

あなたがバケツを得ることができるしている場合、あなたはすでにこのスニペットが動作するために必要なすべてのワイヤーを持っている:少し遅れて相手に

using (s3Client) 
{ 

    long totalFileSize = 0; 

    try 
    {   
     ListObjectsRequest Lor = new ListObjectsRequest() 
     { 
      BucketName = "<Your Bucket Name>", 
      Prefix = "<Your Folder Path>", 
      ///assuming your delimiter is a/
      Delimiter = "/" 
     }; 

     ListObjectsResponse response1 = s3Client.ListObjects(Lor); 

     foreach (S3Object s3Object in response1.S3Objects) 
     { 
      totalFileSize += s3Object.Size(); 
     } 
    } 

    catch (AmazonS3Exception ex) 
    { 
     ///do some error handling.... 
    } 
}  
+0

への複数の呼び出しの例リンクをありがとうが、私はすでにそれを勉強しました。我々が実装しなければならないことがたくさんあった、他のものが行われますが、私はこの1つに打たれました。私たちはバケツを取得することができますが、私はそれをどのようにバケットとその空間消費量の中からオブジェクトを取得するかを理解することができません。あなたが(可能であれば)例を提供できるなら、大きな助けになるでしょう。おかげで –

+0

あなたの貴重な時間の投資とコードのために大変ありがとう、私はそれをテストし、あなたに結果を知ってもらい、感謝します。 –

+0

こんにちはMike s3Object.Size()はs3Objectに入っていて、リビジョン番号のAWS Toolkitを使っています:{4F4C7530-C16D-4C75-9492-93207F03E902}:ありがとうございます。 –

0

唯一の方法は、あなたが見ているS3のすべてのファイル(例:接頭辞/ some/folder /)を列挙し、返されるすべてのサイズを追加することです。 S3はこの情報を知らない。

VBでは、いくつかのAPIを使用する必要があります。S3に接頭辞付きのバケットの内容を表示すると、結果は各ファイルのサイズ情報とともに一度に約1000件戻されます。したがって、25,000ファイルに使用されるGBを追加するには、25回程度の呼び出しが必要です。

+0

私が以前に言ったように返信に感謝します。Amazon S3の初心者です。あなたが私にそれを行うためのおよその方法を見ることができるライブリンクを私に提供できるかどうか(C#またはVBであれば私にとっては大したことではない - 私は両方とも使える)。もう一度お礼と申し訳ありません。 –

+0

バケット –

2

が、これは魔法のように動作します:あなたのアクセスキーとシークレットアクセスキー

 AmazonS3 client = AWSClientFactory.CreateAmazonS3Client(RegionEndpoint.USEast1); 

     ListObjectsRequest request = new ListObjectsRequest(); 
     request.WithBucketName(bucketName); 
     request.WithPrefix(folderPath); 
     long total = 0; 
     do 
     { 
      ListObjectsResponse response = client.ListObjects(request); 

      if (response != null && response.S3Objects != null)    
       total += response.S3Objects.Sum(s => s.Size); 

      if (response.IsTruncated) 
      { 
       request.Marker = response.NextMarker; 
      } 
      else 
      { 
       request = null; 
      } 
     } while (request != null); 

は、慣例により、アプリケーションの設定に保存する必要があります:

<configuration> 
    <appSettings> 
    <add key="AWSAccessKey" value="XXXXXXXXXXXXXXX"/> 
    <add key="AWSSecretKey" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"/> 
    </appSettings> 
</configuration> 

希望に役立ちます。

関連する問題