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

如何使用Java SDK删除启用版本控制的MinIO存储桶中对象的所有版本?

在MinIO Java SDK中删除对象的所有版本

你提到的removeObject方法默认只是添加一个删除标记(软删除),并不会真正移除对象的所有版本。要实现MinIO控制台中「删除对象所有版本」的功能,需要通过以下步骤操作:

步骤1:获取对象的所有版本

首先列出目标对象的所有版本(包括历史版本和已标记删除的版本):

// 列出指定存储桶中对象的所有版本
Iterable<Result<Version>> versionResults = minioClient.listVersions(
    ListVersionsArgs.builder()
        .bucket("bademjoon")
        .prefix("tokhm") // 指定要删除的对象名
        .build()
);

步骤2:构造批量删除请求

遍历所有版本,收集每个版本的名称和版本ID,构造批量删除条目:

List<DeleteObject> deleteItems = new ArrayList<>();
for (Result<Version> result : versionResults) {
    Version version = result.get();
    // 添加每个版本到删除列表,必须指定versionId才能彻底删除对应版本
    deleteItems.add(new DeleteObject(version.objectName(), version.versionId()));
}

步骤3:执行批量删除

使用removeObjects方法执行批量删除,彻底移除所有版本:

Iterable<Result<DeleteError>> deleteResults = minioClient.removeObjects(
    RemoveObjectsArgs.builder()
        .bucket("bademjoon")
        .objects(deleteItems)
        .build()
);

// 遍历结果,处理可能的删除错误
for (Result<DeleteError> errorResult : deleteResults) {
    DeleteError error = errorResult.get();
    System.err.printf("删除对象 %s(版本 %s)失败:%s%n", 
        error.objectName(), error.versionId(), error.message());
}

关键说明

  • 只有指定versionId的删除操作,才能真正移除对应版本的对象;如果不指定版本ID,只会添加新的删除标记。
  • 上述代码会彻底删除对象的所有历史版本和删除标记,与控制台中选择「Yes」删除所有版本的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:12:15