2012-03-27 169 views
1

我想要做的是,我想檢查Amazon S3存儲桶中存儲桶的特定文件夾內的子文件夾的大小使用vb。如何檢查Amazon S3存儲桶內文件夾的子文件夾大小

這樣做是否可行,如果有的話,任何鏈接和幫助將被appriciated。

+0

S3是平的 - 沒有文件夾,只有真正長的名稱和分隔符的文件,使它看起來有文件夾。你是否想要找出用一個公共前綴存儲的所有對象的大小?例如/ ram/files/*? – Mike 2012-03-27 11:51:38

+0

好吧,我不是很熟悉亞馬遜S3,這是情況,那麼它會幫助我的問題。就好像Ram是存儲桶的名稱和文件駐留在其中一樣,是否可以獲取並限制文件的最大大小... – 2012-03-27 11:53:50

回答

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

感謝您的鏈接,但我已經研究過它。有很多事情我們必須執行,其他的東西已經完成,但我在這一點上受到打擊。我們可以取出桶,但是我無法弄清楚如何從桶內獲取物體以及它們的空間消耗。如果你能提供一個例子(如果可能的話),這將是一個很大的幫助。謝謝 – 2012-03-27 12:41:42

+0

非常感謝你的代碼,也爲你的寶貴時間的投資,我會測試它,讓你知道結果,再次感謝。 – 2012-03-27 13:02:49

+0

Hello Mike s3Object.Size()是我在s3Object中得到的,我使用AWS Toolkit,修訂號爲{4F4C7530-C16D-4C75-9492-93207F03E902}:謝謝。 – 2012-03-28 05:48:49

0

的唯一途徑是通過在S3上的所有文件列舉你正在尋找(如前綴/一些/文件夾/)加起來回來的所有尺寸。 S3不知道這些信息。

在VB中你必須使用一些API,當你問S3列出了前綴的桶的內容,結果付出了時間回到1000左右,有大小信息爲每個文件。因此,將用於25,000個文件的GB加起來應該只需要25次左右的調用。

+0

感謝回覆,因爲我之前說過我是Amazon S3的新手,所以它會很棒如果你可以給我一個實時鏈接,我可以看到大致的方法來做到這一點(如果它將在C#或VB中 - 我可以與兩者一起工作,對我來說很重要)。再次感謝_Tom_和對不起。 – 2012-03-27 12:21:04

+0

多次調用存儲桶的任何示例 – 2012-03-30 17:44:14

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> 

希望有所幫助。

相關問題