我知道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/,而不必检索子目录和文件。
干杯
当我们在
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
属性获取特定父路径/文件夹的子文件夹作为键。