2012-01-19 60 views
12

說我有以下目錄和文件在亞馬遜S3存儲桶(文件是在大膽):如何使用AWS S3 API非遞歸瀏覽目錄的內容?

  • bucketname/
  • bucketname /文件夾1/
  • bucketname /文件夾1/foobar.txt
  • bucketname/folder1中/ subfolder1/
  • bucketname/folder1中/ subfolder1/hello.txt的
  • bucketname/folder1中/ subfolder2/
  • bucketname/folder1中/ subfolder2/world.txt
  • bucketname/folder1中/ subfolder2/subsubfolder1/
  • bucketname/folder1中/ subfolder2/subsubfolder1/file.txt的

如何列出的所有對象和與.NET AWS S3 API指定目錄的直接子目錄,沒有遞歸獲得該d下的所有內容irectory?換句話說,我怎樣才能「瀏覽」一個目錄中的內容?

例如,想象一下我想瀏覽bucketname/folder1/的內容。我想看到的是以下內容:

  • bucketname /文件夾1/foobar.txt
  • bucketname /文件夾1/subfolder1/
  • bucketname /文件夾1/subfolder2/

。 ..沒有別的。我不想列出子目錄中的文件和目錄,我只想列出folder1級別的文件和子目錄。

有沒有辦法將過濾器應用到單個AWS API調用,以便它不會返回的所有內容並強制我僅手動解析我需要的內容?

我發現這個代碼讓我得到的只是眼前的子目錄(如預期),但我無法弄清楚如何將立即文件太:

var request = new ListObjectsRequest() 
    .WithBucketName("bucketname") 
    .WithPrefix(@"folder1/") 
    .WithDelimiter(@"/"); 

using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) 
using (var response = client.ListObjects(request)) 
{ 
    foreach (var item in response.CommonPrefixes) 
    { 
     /* ... */ 
    } 
} 

回答

22

我有相反的問題(我知道如何獲取指定文件夾中的文件,而不是子目錄)。

答案是亞馬遜列出的文件與子文件夾不同。

如您的示例所示,在ListObjectsResponse.CommonPrefixes集合中列出子文件夾。

文件列在ListObjectsResponse.S3Objects集合中。

所以,你的代碼應該是這樣的:

var request = new ListObjectsRequest() 
.WithBucketName("bucketname") 
.WithPrefix(@"folder1/") 
.WithDelimiter(@"/"); 

using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) 
using (var response = client.ListObjects(request)) 
{ 
    foreach (var subFolder in response.CommonPrefixes) 
    { 
     /* list the sub-folders */ 
    } 
    foreach (var file in response.S3Objects) { 
     /* list the files */ 
    } 
} 

我的谷歌搜索的註釋部分打開了這個職位上的burningmonk博客中具有此:

當你做出ListObjects要求,要列出頂級文件夾,請不要設置前綴,但將分隔符設置爲'/',然後檢查頂部文件夾中文件夾響應的'CommonPrefixes'屬性。

要列出'rootfolder'的內容,請將前綴設置爲文件夾名稱加反斜槓的請求,例如'rootfolder /'並將分隔符設置爲'/'。在響應中,您始終將文件夾本身作爲與您在請求中使用的前綴相同的鍵的元素,以及「CommonPrefixes」屬性中的所有子文件夾。

相關問題