.net 在S3中删除一个bucket

.net 在S3中删除一个bucket,.net,sdk,amazon-s3,amazon-web-services,.net,Sdk,Amazon S3,Amazon Web Services,我正在寻找一种更好的方法来删除S3存储桶。 AWS SDK for.Net不允许删除非空存储桶和 没有任何重载的DeleteBucket来删除bucket中的任何子对象 这是我当前删除桶的方式- 检索bucket中的所有对象 删除对象 删除桶 //首先删除bucket中的所有对象-不能删除非空bucket using (ListObjectsResponse response = amazonS3Client.ListObjects(new ListObjectsRequest().WithBu

我正在寻找一种更好的方法来删除S3存储桶。 AWS SDK for.Net不允许删除非空存储桶和 没有任何重载的DeleteBucket来删除bucket中的任何子对象

这是我当前删除桶的方式-

检索bucket中的所有对象 删除对象 删除桶 //首先删除bucket中的所有对象-不能删除非空bucket

using (ListObjectsResponse response = amazonS3Client.ListObjects(new ListObjectsRequest().WithBucketName(bucket.Name)))
{
    if (response.S3Objects.Count > 0)
    {
        List<KeyVersion> keys = response.S3Objects.Select(obj => new KeyVersion(obj.Key)).ToList();
        DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest
        {
            BucketName = bucket.Name,
            Keys = keys
        };
        amazonS3Client.DeleteObjects(deleteObjectsRequest);
    }
}

//Delete Bucket
DeleteBucketRequest request = new DeleteBucketRequest
{
    BucketName = bucket.Name
};
amazonS3Client.DeleteBucket(request);
在S3中删除bucket有什么更好的方法吗?在S3中,我不需要首先获取对象。 在AWS SDK for.Net中是否有我缺少的方法


谢谢大家!

我认为这是不可能的。甚至他们的REST API也不支持删除非空的存储桶:

删除桶 描述 DELETE操作的这个实现删除URI中命名的bucket。必须先删除bucket中的所有对象,包括所有对象版本和删除标记,然后才能删除bucket本身

摘自


通过调用deletemultipleobjects请求,您的做法是正确的。请注意,如果您使用的是版本化的bucket,则必须在删除bucket之前删除所有版本中的所有对象。

我认为这是不可能的。甚至他们的REST API也不支持删除非空的存储桶:

删除桶 描述 DELETE操作的这个实现删除URI中命名的bucket。必须先删除bucket中的所有对象,包括所有对象版本和删除标记,然后才能删除bucket本身

摘自


通过调用deletemultipleobjects请求,您的做法是正确的。请注意,如果您使用的是版本化的bucket,则必须在删除bucket之前删除其所有版本中的所有对象。

不使用API直接执行此操作更容易。使用S3管理控制台的生命周期设置,有一种非常简单的方法可以删除S3中的bucket:

选择要删除的存储桶,然后转到“属性”下的“生命周期”

添加新规则设置要应用于整个bucket的新规则

单击右下角的配置规则按钮

在“对对象的操作”下拉列表中,选择“永久删除”

将完成的天数设置为1。水桶将在24小时内消失


不使用API就可以更轻松地直接执行。使用S3管理控制台的生命周期设置,有一种非常简单的方法可以删除S3中的bucket:

选择要删除的存储桶,然后转到“属性”下的“生命周期”

添加新规则设置要应用于整个bucket的新规则

单击右下角的配置规则按钮

在“对对象的操作”下拉列表中,选择“永久删除”

将完成的天数设置为1。水桶将在24小时内消失


以防还有人对这个老问题感兴趣。有人像我一样偶然发现了它。尤其是那些使用.NETCore进行S3交互的人

与此同时,官方的AWS S3 Utils类出现了,它有一个名为DeleteS3BucketWithObjectsAsync的函数,支持删除bucket及其所有对象。 可以找到官方文件


它是AWSSDK.S3 nuget包中AmazonS3Util名称空间的一部分。

以防有人对这个老问题感兴趣。有人像我一样偶然发现了它。尤其是那些使用.NETCore进行S3交互的人

与此同时,官方的AWS S3 Utils类出现了,它有一个名为DeleteS3BucketWithObjectsAsync的函数,支持删除bucket及其所有对象。 可以找到官方文件


它是AWSSDK.S3 nuget包中AmazonS3Util名称空间的一部分。

非常感谢!这似乎是一个很好的方法。谢谢,尝试了这个方法并得到了以下错误:Amazon.S3.AmazonS3Exception:没有密钥的版本子资源-Amazon.Runtime.Internal.HttpErrorResponseException:远程服务器返回了一个错误:400个错误请求。---System.Net.WebException:远程服务器返回错误:400错误请求。我可以连接客户机,并且bucket与对象一起存在。有什么想法吗?谢谢谢谢!这似乎是一个很好的方法。谢谢,尝试了这个方法并得到了以下错误:Amazon.S3.AmazonS3Exception:没有密钥的版本子资源-Amazon.Runtime.Internal.HttpErrorResponseException:远程服务器返回了一个错误:400个错误请求。---System.Net.WebException:远程服务器返回错误:400错误请求。我可以连接客户机,并且bucket与对象一起存在。有什么想法吗?谢谢