AmazonS3:如何获取存储桶中的文件夹列表?我所发现的就是这种GETBucket方法,但我不明白如何获取当前文件夹中的文件夹列表。我需要使用哪个前缀和分隔符?这可能吗?举例来说,假设我在USEast1区域中有一个名为MyBucketName的存储桶,其中包含以下键:temp/temp/foobar.txttemp/txt/temp/txt/test1.txttemp/txt/test2.txttemp2/使用文件夹可能会让人感到困惑,因为S3本身不支持层次结构——相反,这些只是像任何其他S3对象一样的键。文件夹只是S3Web控制台中的抽象概念,可以更轻松地导航存储桶。因此,当我们以编程方式工作时,我们希望找到与“文件夹”的维度(分隔符“/”,大小=0)相匹配的键,因为它们可能由S3控制台作为“文件夹”呈现给我们。请注意这两个示例:我使用的是AWSSDK.S3版本3.1NuGet包。示例1:存储桶中的所有文件夹此代码根据S3文档中的这个基本示例进行了修改,以列出存储桶中的所有键。下面的示例将识别所有以分隔符/结尾且也为空的键。IAmazonS3客户端;using(client=newAmazonS3Client(Amazon.RegionEndpoint.USEast1)){//构建您的请求以列出存储桶中的对象ListObjectsRequestrequest=newListObjectsRequest{BucketName="MyBucketName"};do{//构建对S3的调用并存储响应ListObjectsResponseresponse=client.ListObjects(request);//过滤响应以查找以下键://-以分隔符“/”结尾//-为空。IEnumerable文件夹=response.S3Objects.Where(x=>x.Key.EndsWith(@"/")&&x.Size==0);//用你的输出键做点什么。对于此示例,我们写入控制台。folders.ToList().ForEach(x=>System.Console.WriteLine(x.Key));//如果响应被截断,我们将发出另一个请求//并提取下一批键if(response.IsTruncated){request.Marker=response.NextMarker;}else{请求=null;}}while(请求!=null);}预期输出到控制台:temp/temp/txt/temp2/示例2:匹配指定前导的文件夹您可以通过在ListObjectsRequest上设置Prefix属性进一步限制它仅检索与指定前缀匹配的文件夹当应用于示例1时,我们期望得到以下输出:temp/temp/txt/进一步阅读:或者,另一种更简单的方法是使用https://github.com/minio/minio-dotnet可以与AmazonS3和其他兼容的存储解决方案一起使用。以下示例显示如何仅过滤掉目录。这里通过ListObjects()API将CommonPrefix抽象为一个文件夹。使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;使用Minio;使用Minio.Xml;namespaceMinio.Examples{classListObjects{staticintMain(string[]args){varclient=newMinioClient("https://s3.amazonaws.com","ACCESSKEY","SECRETKEY");varitems=client.ListObjects("桶");foreach(Itemiteminitems){if(item.IsDir){Console.Out.WriteLine("{0}",item.Key);}}返回0;}}}使用/path/to/read/前缀(注意没有前导斜杠,但有尾随斜杠)和/delimiter,您将在该文件夹中找到所有文件夹。CommonPrefixes仅当指定分隔符时,响应才能包含CommonPrefixes。这样做时,CommonPrefixes包含Prefix和分隔符指定的下一个字符串之间的所有键(如果有)。实际上,CommonPrefixes列出了与Prefix指定的目录中的子目录相同的键。例如,如果前缀是notes/,分隔符是斜线(/),在notes/summer/july中,公共前缀是notes/summer/。计算返回值时,聚合在一个公共前缀中的所有键都算作一次返回值。请参见最大键。http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.htmlAnthony在这里缺少的是文件夹不一定具有与之关联的键。如果在S3中创建一个文件,并给定一个键,如“folder/name.ext”,S3将显示一个“文件夹”文件夹,但它没有键,这意味着你不在结果中获取它.捕获这些文件夹的唯一方法是查看键本身,并为“/”字符正则表达式键名称。如果我更了解C#,我会为您写一个代码示例,但这里是对我在另一个问题上写的python示例的引用。以上是C#学习教程:AmazonS3:Howtogetthelistoffoldersinthebucket?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
