MINIO:minio-dotnet环境下如何获取指定对象的所有版本
基于minio-dotnet查询指定对象所有版本的实现方法
前置要求
- 目标存储桶已开启版本控制功能,未开启版本控制的存储桶不会保留对象历史版本
- 你使用的minio-dotnet SDK版本需支持版本相关API(v3.1.0及以上版本均兼容)
核心实现方法
核心调用SDK提供的ListObjectsVersionsAsync方法,过滤指定对象名的所有版本即可,完整示例代码如下:
using Minio; using Minio.DataModel; using Minio.DataModel.Args; // 初始化MinIO客户端 var minioClient = new MinioClient() .WithEndpoint("你的MinIO服务地址:端口") .WithCredentials("你的AccessKey", "你的SecretKey") .WithSSL(false) // 生产环境建议替换为true启用HTTPS .Build(); // 定义查询参数 string bucketName = "目标存储桶名称"; string targetObjectName = "你要查询的对象完整名称"; var allVersions = new List<Item>(); try { // 构造版本列表查询参数 var listArgs = new ListObjectsVersionsArgs() .WithBucket(bucketName) .WithPrefix(targetObjectName) .WithVersions(true); // 遍历获取所有版本记录 await foreach (var item in minioClient.ListObjectsVersionsAsync(listArgs)) { // 过滤掉前缀匹配的其他对象,只保留完全匹配的目标对象版本 if (item.Key == targetObjectName) { allVersions.Add(item); } } // 版本信息使用示例 Console.WriteLine($"目标对象共找到{allVersions.Count}个版本:"); foreach (var version in allVersions) { Console.WriteLine($"版本ID: {version.VersionId}, 最后修改时间: {version.LastModified}, 是否为最新版本: {version.IsLatest}, 文件大小: {version.Size}"); } } catch (Exception ex) { Console.WriteLine($"查询失败:{ex.Message}"); }
返回字段说明
每个版本对应的Item对象包含核心属性如下:
VersionId:版本唯一标识,后续下载、删除指定版本时需要传入该值IsLatest:布尔值,标识该版本是否为对象的当前最新版本LastModified:该版本的上传/修改时间Size:该版本的文件大小ETag:该版本文件的哈希校验值
内容的提问来源于stack exchange,提问作者Konrad Mieszała
相关产品推荐
相关产品推荐

