C# 从.net核心应用程序获取AWS S3目录名列表

C# 从.net核心应用程序获取AWS S3目录名列表,c#,asp.net-mvc,amazon-s3,.net-core,C#,Asp.net Mvc,Amazon S3,.net Core,我只是在.net核心mvc应用程序上使用aws s3。我只需要输入s3的bucket名称,然后返回这个bucket中所有的目录名列表,但这个简单的任务我在互联网上找不到。我已经尝试了AWS论坛提供的一些解决方案,但问题是这根本不起作用。贝娄我提供了我的控制器代码也论坛链接。实际上,他们告诉我的问题是,Amazon.S3.IO和S3DirectoryInfo命名空间已从.NETCore中删除,因此我没有按照他们的建议进行操作。任何人都可以修复我下面的代码,它将给出.net核心应用程序中的bucke

我只是在.net核心mvc应用程序上使用aws s3。我只需要输入s3的bucket名称,然后返回这个bucket中所有的目录名列表,但这个简单的任务我在互联网上找不到。我已经尝试了AWS论坛提供的一些解决方案,但问题是这根本不起作用。贝娄我提供了我的控制器代码也论坛链接。实际上,他们告诉我的问题是,
Amazon.S3.IO
S3DirectoryInfo
命名空间已从.NETCore中删除,因此我没有按照他们的建议进行操作。任何人都可以修复我下面的代码,它将给出.net核心应用程序中的bucket目录列表

我使用的是两个nuget包-

AWSSDK.Core
AWSSDK.S3

控制器:

使用亚马逊;
使用Amazon.S3;
使用Amazon.S3.0模型;
公共媒体(
{
字符串bucketName=“domain33.com”;
Amazon3Client s3Client=新的Amazon3Client(“访问密钥ID”、“机密访问密钥”、RegionEndpoint.USEast1);
var getResponse=s3Client.ListBucketsAsync(新的GetObjectRequest
{
BucketName=BucketName
});
var x=getResponse;
返回视图();
}

您可以尝试使用
IAmazonS3
上的
ListObjectsV2Async
方法,根据。如果链路失效,其代码如下所示:

// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.)

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ListObjectsTest
    {
        private const string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;

        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            ListingObjectsAsync().Wait();
        }

        static async Task ListingObjectsAsync()
        {
            try
            {
                ListObjectsV2Request request = new ListObjectsV2Request
                {
                    BucketName = bucketName,
                    MaxKeys = 10
                };
                ListObjectsV2Response response;
                do
                {
                    response = await client.ListObjectsV2Async(request);

                    // Process the response.
                    foreach (S3Object entry in response.S3Objects)
                    {
                        Console.WriteLine("key = {0} size = {1}",
                            entry.Key, entry.Size);
                    }
                    Console.WriteLine("Next Continuation Token: {0}", response.NextContinuationToken);
                    request.ContinuationToken = response.NextContinuationToken;
                } while (response.IsTruncated);
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString());
                Console.ReadKey();
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.ToString());
                Console.ReadKey();
            }
        }
    }
}

基于该示例,您可以进行进一步的处理,或者将键添加到字符串列表中进行后续处理,而不是像示例代码那样在控制台中编写。例如,您可以将每个键添加到一个列表中,然后处理该列表以计算不同的“目录”。

问题是,它们将单词
称为directory
is
key
。这就是为什么我在网上找不到这个例子。啊-是的,白话是魔鬼。S3!=一个文件系统确切地说,但一般来说,键意味着文件路径,而S3并没有真正的第一类“文件夹”或“目录”概念,因为S3中不可能存在空的“文件夹”。我以为你想在S3中找到唯一的“文件夹”。