Csharp/C#教程:如何使用AWS S3 API非递归地浏览目录的内容?分享


如何使用AWS S3 API非递归地浏览目录的内容?

假设我在Amazon S3存储桶中有以下目录和文件(文件以粗体显示 ):

如何使用.NET AWS S3 API列出给定目录的所有对象和直接子目录,而不递归获取该目录下的所有内容? 换句话说,如何在单个级别“浏览”目录的内容?

例如,想象一下我想要浏览bucketname/folder1/的内容。 我想看到的是以下内容:

……别无其他。 我不想列出子目录中的文件和目录,我只想列出folder1级别的文件和子目录。

有没有办法将filter应用于单个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 */ } } 

我的谷歌搜索在burnmonk博客上发布了这篇文章,在评论部分:

当您发出ListObjects请求时,要列出顶级文件夹,请不要设置前缀,而是将分隔符设置为“/”,然后检查响应中的“CommonPrefixes”属性,以查找顶部文件夹中的文件夹。

要列出’rootfolder’的内容,请将前缀设置为文件夹名称加反斜杠的请求,例如’rootfolder /’,并将分隔符设置为’/’。 在响应中,您始终将文件夹本身作为元素,其具有与您在请求中使用的前缀相同的键,以及“CommonPrefixes”属性中的任何子文件夹。

上述就是C#学习教程:如何使用AWS S3 API非递归地浏览目录的内容?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1009901.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐