获取 AWS S3 中的顶级文件夹

问题描述 投票:0回答:1

我知道AWS S3中不存在“文件夹”的概念,一切都只是一对键和值。这对我来说实际上是一个问题,因为我已经实现了一个类来使用 S3 来访问文件和文件夹。要获取文件夹列表,我必须获取所有键的列表(可能大约有 50,000 个对象),并根据“/”字符的位置找出文件夹。

我在互联网上搜索了一个更简单的方法,但我没有找到任何东西。但是,当我运行“S3 浏览器”时,我发现它可以非常快速地列出文件夹名称。我尝试嗅探网络并查看 S3 浏览器使用什么 S3 API 以及如何使用,但由于 S3 浏览器使用 SSL,所以我没有去任何地方。

如果我能以某种方式找到S3中代表文件夹的所有kes,你能告诉我吗?

示例:

/F1/
/F1/F1_1/
/F1/F1_1/F1_2
/F1/F1_1/F1_2/File1.ZIP
/F1/F1_2/F1_2/File2.ZIP
/F2/
/F2/F1

我希望能够快速获取/F1/和/F2/,而不必检索子目录和文件。

干杯

c# amazon-s3 directory
1个回答
0
投票

当我们在

ListObjectsV2Async
中将分隔符参数作为斜杠(“/”)传递时 方法,它将具有相同前缀的键分组在一起,并模拟文件夹结构

var listRequest = new ListObjectsV2Request
{
    BucketName = bucketName,
    Prefix = prefix, // set root or targeted folder here
    Delimiter = "/"; // Set delimiter as "/"
};

using var client = new AmazonS3Client();
var response = await client.ListObjectsV2Async(listRequest);

// Access "CommonPrefixes" list for folder names
var folderNames = response.CommonPrefixes.Select(p => p.Prefix).ToList();

这比列出所有对象并根据所有 S3 Key 中的斜杠进行过滤要高效得多。

  • 您可以从响应中删除前缀以仅获取文件夹名称
  • 使用
    Prefix
    属性获取特定父路径/文件夹的子文件夹作为键。
© www.soinside.com 2019 - 2024. All rights reserved.