假设我在Amazon S3存储桶中具有以下目录和文件(文件位于粗体):
如何使用.NET AWS S3 API列出给定目录的所有对象和直接子目录,而又不递归地获取该目录下的所有内容?换句话说,如何在单个级别上“浏览”目录的内容?
例如,假设我要浏览
bucketname/folder1/
的内容。我希望看到以下内容:...别无其他。我不想在子目录中列出文件和目录,我只想在
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)
{
/* ... */
}
}
最佳答案
我遇到了相反的问题(我知道如何获取指定文件夹中的文件,而不是子目录中的文件)。
答案是,亚马逊列出的文件与子文件夹列出的文件不同。
如您的示例所示,子文件夹在 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 */
}
}
我的Google搜索在burningmonk博客上的评论部分中显示了此信息: