You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C# SDK获取AWS S3版本控制桶的DeleteMarkers?

解决S3启用版本控制后获取删除版本与Delete Marker的问题

AWSSDK.S3 NuGet包完全可以实现该功能

默认情况下,S3的常规列表接口(如ListObjectsV2)只会返回最新的非删除版本对象,因此你需要调用专门的版本列表接口,或者修改请求参数来获取删除相关的版本信息:

方法1:使用ListObjectVersions接口(推荐)

这个接口专门用于列出存储桶内的所有对象版本,包括已删除的对象版本和Delete Marker。示例代码如下:

using Amazon.S3;
using Amazon.S3.Model;

var s3Client = new AmazonS3Client();
var request = new ListObjectVersionsRequest
{
    BucketName = "你的存储桶名称"
};

var response = await s3Client.ListObjectVersionsAsync(request);

// 遍历所有对象版本(包括已被删除的非标记版本)
foreach (var version in response.Versions)
{
    Console.WriteLine($"对象键: {version.Key}, 版本ID: {version.VersionId}, 最后修改时间: {version.LastModified}, 是否被删除: {version.IsDeleteMarker}");
}

// 遍历所有Delete Marker记录
foreach (var marker in response.DeleteMarkers)
{
    Console.WriteLine($"对象键: {marker.Key}, Delete Marker版本ID: {marker.VersionId}, 创建时间: {marker.LastModified}");
}

方法2:修改ListObjectsV2的请求参数

如果你想通过ListObjectsV2接口获取相关信息,需要开启两个参数:

  • 将IncludeDeletedObjects设为true:返回包含Delete Marker的结果
  • 将IncludeVersions设为true:返回所有对象版本

示例代码:

var request = new ListObjectsV2Request
{
    BucketName = "你的存储桶名称",
    IncludeDeletedObjects = true,
    IncludeVersions = true
};

var response = await s3Client.ListObjectsV2Async(request);

// 遍历返回的所有条目,区分普通版本和Delete Marker
foreach (var item in response.S3Objects)
{
    if (item.IsDeleteMarker)
    {
        Console.WriteLine($"Delete Marker - 键: {item.Key}, 版本ID: {item.VersionId}");
    }
    else
    {
        Console.WriteLine($"对象版本 - 键: {item.Key}, 版本ID: {item.VersionId}");
    }
}

其他AWS SDK同样支持该功能

所有AWS官方SDK(如Python的boto3、Java的AWS SDK for Java、Go的AWS SDK for Go等)都支持获取S3对象版本和Delete Marker信息,因为这是S3 REST API的标准功能。不同SDK的实现逻辑与.NET SDK一致:只需调用对应版本列表的接口(如boto3的list_object_versions、Java的listObjectVersions),或修改列表请求的参数来开启版本和删除记录的返回。

内容的提问来源于stack exchange,提问作者Brondahl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:25:18