✨ 前言

在构建企业级对象存储系统时,“对象的版本管理”是一个关键特性。MinIO 作为一款高性能、Kubernetes 原生的 S3 兼容对象存储系统,也支持强大的版本控制功能。

本文将通过 Go 示例代码 + 实操讲解 的形式,手把手带你掌握 MinIO 的版本控制能力,包括开启版本控制、获取对象版本、物理删除等高频操作。


🛠️ 1、如何开启版本管理

MinIO 使用 S3 API 实现对象版本控制,默认是关闭的。你可以使用如下 Go 代码开启某个 Bucket 的版本控制:

import ("context""log/slog""github.com/minio/minio-go/v7"
)// EnableVersion 开启版本控制
func EnableVersion(client *minio.Client, bucketName string) {err := client.EnableVersioning(context.Background(), bucketName)if err != nil {slog.Info("开启版本控制失败", err)return}slog.Info("开启版本控制成功")
}

📝 注意事项:

  • Bucket 必须已经存在;
  • 一旦开启,后续上传的对象都会生成唯一的版本 ID;
  • 关闭版本控制不会删除已有版本。

📦 2、开启版本管理后,如何获取对象?

当版本管理开启后,每次上传对象都会生成一个唯一的 VersionID。你可以通过如下方式获取最新版本的对象:

// GetLatestObject 获取最新版本对象
func GetLatestObject(client *minio.Client, bucketName, objectName string) {object, err := client.GetObject(context.Background(), bucketName, objectName, minio.GetObjectOptions{})if err != nil {slog.Error("获取对象失败:", err)return}defer object.Close()// 示例:读取数据内容buf := make([]byte, 1024)n, _ := object.Read(buf)slog.Info("对象内容:", string(buf[:n]))
}

🔎 提示:

  • 不指定 VersionID,默认获取最新版本;
  • 如果对象已被删除(非物理删除),仍可通过版本 ID 访问旧版本。

🎯 3、如何获取指定版本的对象?

若你知道某个对象的具体 VersionID,可以精确获取它:

// ListObjectVersion 获取一个对象的所有版本号
func ListObjectVersion(client *minio.Client, bucketName, objectName string) []string {var versionIds []stringobjects := client.ListObjects(context.Background(), bucketName, minio.ListObjectsOptions{Prefix:       objectName,WithVersions: true,})for object := range objects {slog.Info("objectName对象信息,", "versionId", object.VersionID, "IsDeleteMarker",object.IsDeleteMarker, "IsLatest", object.IsLatest)versionIds = append(versionIds, object.VersionID)}return versionIds
}// GetObjectByVersion 指定版本获取对象
func GetObjectByVersion(client *minio.Client, bucketName, objectName, versionID string) {object, err := client.GetObject(context.Background

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92690.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92690.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92690.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组toString方法及类型检测修复方案

在 JavaScript 中,数组的 toString() 方法被覆盖(重写)为返回数组元素的逗号分隔字符串,而不是原始的 [object Array] 类型标识。以下是详细解释和修复方案:问题原因Array.prototype.toString 被覆盖数组继承自 Object…

mysql索引底层B+树

B树胜出的关键特性:矮胖树结构:3-4层高度即可存储2000万条记录(假设每页存1000条) 叶子链表:所有数据存储在叶子节点,并通过双向链表连接 非叶导航:非叶子节点仅存储键值,不保存数据…

AI开放课堂:钉钉MCP开发实战

我们正处在AI技术爆发的时代,也处于企业数字化蓬勃发展的时代。如何利用AI技术,突破模型自身知识的局限,安全、高效地与外部世界连接和交互,是当前所有AI开发者在企业数字化中面临的问题之一。 MCP(Model Context Prot…

DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B

使用过DigitalOcean GPU Droplet 服务器的用户应该对我们的一键模型部署功能不陌生。DigitalOcean 的一键模型部署 (1-Click Models) 功能是 DO 为开发者和企业提供的一种便捷方式,用于快速部署和运行预训练的生成式 AI 模型,尤其是大型语言模型 (LLM)。…

【嵌入式面试】嵌入式笔试与面试宝典(offer必来)

💌 所属专栏:【嵌入式面试】 😀 作  者:兰舟比特 🐾 🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干…

企业级数据分析创新实战:基于表格交互与智能分析的双引擎架构

引言:数字化转型中数据协同困境与系统融合挑战 在数字化转型实践中,企业普遍面临数据系统与业务运营的协同困境,主要表现为数据处理平台与核心业务流程的架构隔离、分析成果与决策闭环的价值断层、以及双重数据维护带来的资源损耗。这种系统…

openbmc 日志系统继续分析

1.说明 1.1 总体说明 本节是继: https://blog.csdn.net/wit_yuan/article/details/147142407?spm=1011.2415.3001.5331 后的继续分析的文档。 该篇内容主要目的是分析整个openbmc的日志系统。 注意解读文档: https://github.com/openbmc/docs/blob/master/designs/event-l…

【JIRA小白如何使用它进行bug管理】

JIRA小白如何使用它进行bug管理 提示:入职一般来说,公司会提供账号,不需要部署如何提bug: JIRA有两种提交方式 在执行测试用例中在bug管理项目中新建提bug建议或者注意事项: 标题:执行完A之后,发…

陪诊小程序系统开发:开启医疗陪护新时代

在快节奏的现代生活中,人们面临着各种各样的压力,健康问题也日益凸显。当生病就医时,尤其是对于老年人、孕妇、残障人士等特殊群体,独自前往医院往往会遇到诸多困难,如不熟悉医院流程、行动不便、心理上感到孤独无助等…

Leetcode—1035. 不相交的线【中等】

2025每日刷题(214) Leetcode—1035. 不相交的线最长公共子序列长度(Longest Common Subsequence,LCS) 给定两个序列(如字符串或数组),最长公共子序列(LCS)是同…

使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》

Python 多版本环境治理理念驱动的系统架构设计:三维治理、四级隔离、五项自治 原则-CSDN博客 Python 多版本与开发环境治理架构设计-CSDN博客 【终极实战】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具协同 AnacondaPyCharm:构建 Python 全版本栈隔离…

一文通透mamba2「力证Transformer are SSM」:从SSM、半可分矩阵、SMA、SSD到mamba2

前言 实话说,过去一两月一直忙着我司两大类项目的推进 一类是正在逐一上线基于大模型的论文翻译、论文审稿、论文对话、论文修订/润色、论文idea提炼等等(截止到24年8月底,其中的审稿和翻译已上线七月官网 )一类是正在抓紧做面向一个个工厂的具身智能机…

【Java基础06】ArrayList

文章目录1.ArrayList1.1 集合的基本使用1.2 集合的创建和成员方法1.3 练习一:集合的遍历基本数据类型对应的包装类1.4 练习二:使用集合存储并遍历学生对象1.4 练习三:添加用户对象并判断是否存在写方法要思考的步骤1.5 练习四:添加…

ddos 放在多个云主机,同时运行

1. 起因, 目的: 我打开 grok, 被 cloudflare 拦截,问我是不是机器人。 这个情况,如果是别的小网站也就算了,很正常。 大公司也搞这种东西,要么是偷懒,要么是太小气了。 一气之下,我决定写个 ddo…

lspci/setpci用法小结

目录 1.lspci用法小结 2.lspci -t 3.setpci用法小结 1.lspci用法小结 参考博客:【PCIe】lspci用法小结 - 知乎 lspci是一个用来显示系统中所有PCI总线设备或者连接到该总线上所有设备的工具 man lspci lspci(8) …

光通信从入门到精通:PDH→DWDM→OTN 的超详细演进笔记

光通信从入门到精通:PDH→DWDM→OTN 的超详细演进笔记 作者: 脱脱克克 日期:2025-07-24 关键词:DWDM、OTN、G.709、光纤、带宽、C-band、L-band、DSP、ROADM 摘要 本文用一条“高速公路”的比喻,把 40 年光传输技术演进…

安全初级——网页

网页代码<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><script src&…

JVM原理及其机制(二)

目录 一 . 垃圾回收机制&#xff08;GC&#xff09; 二 . 垃圾回收的具体步骤 &#xff08;1&#xff09;先找出谁是垃圾 方案一&#xff1a;引用计数 方案二&#xff1a;可达性分析 &#xff08;2&#xff09;释放垃圾的内存空间 方案一&#xff1a;标记清除 方案二…

Solo:基于 zkHE 的身份验证协议,构建 Web3 可信匿名身份层

“Solo 正在基于其独创的 zkHE 架构&#xff0c;构建一套“可信匿名”的链上身份系统&#xff0c;有望打破长期困扰 Web3 的“不可能三角”&#xff0c;即在隐私保护、身份唯一性与去中心化可验证性之间实现兼得。”前不久&#xff0c;Web3 身份层项目 Solo 宣布完成 120 万美元…

【Excel函数】将数据非空的字段筛选出来放在新列

一、需求描述 将对应数据不为空的字段筛选出来放在新的列里 二、解析 IFERROR(INDEX(B$2:B$10,SMALL(IF(C$2:C$10<>"",ROW(C$2:C$10)-ROW(C$2)1),ROW(A1))),"") 1. IF(C$2:C$10<>"", ROW(C$2:C$10)-ROW(C$2)1) 作用&#xff1a;…