如何知道AmazonS3 SDK 3.0中是否存在存储桶

时间:2016-04-26 19:47:09

标签: c# amazon-s3

目前我正在使用Amazon S3 for 3.5 .net进行CRUD操作,我使用的是3.1.5版本。

我找到了这段代码来检查存储桶是否存在:

AmazonS3Client s3Client = new AmazonS3Client ();
 ///setup the client configuration

S3DirectoryInfo directoryInfo = new S3DirectoryInfo(s3Client, bucketName);
                bucketExists = directoryInfo.Exists;

是否有另一种优雅的方式(c#代码)来检查存储桶是否存在?

2 个答案:

答案 0 :(得分:1)

您的代码是用c#编写的,您正在寻找其他方法来检查目录是否存在?我认为你的方式更好。

您可以在根目录中创建所有子文件夹的列表,并将其存储在其他位置(文本文件或列表或任何您想要的内容),然后您不需要创建每次与亚马逊的连接。

S3DirectoryInfo s3Root = new S3DirectoryInfo(s3Client, "bucketofcode");
foreach (S3DirectoryInfo subDirectory in s3Root.GetDirectories())
{
    Console.WriteLine(subDirectory.Name);
}

从这里https://blogs.aws.amazon.com/net/post/Tx2N8LWZYHZHGQI/The-Three-Different-APIs-for-Amazon-S3

答案 1 :(得分:1)

我最初遵循这里的答案,但是我改用了一种稍有不同的方法,因此我想与大家分享。如果该存储桶尚不存在,则此方法将创建该存储桶。

internal async Task CreateBucketAsync(string bucket, CancellationToken token)
{
    if (string.IsNullOrEmpty(bucket)) return;

    using (var amazonClient = GetAmazonClient)
    {
        if (AmazonS3Util.DoesS3BucketExist(amazonClient, bucket)) return;
        await amazonClient.PutBucketAsync(new PutBucketRequest { BucketName = bucket, UseClientRegion = true }, token);
        await SetMultiPartLifetime(amazonClient, bucket, token);
    }
}