Minio 判断对象是否存在

news2024/10/6 22:24:42

Minio数据模型 中描述了 MinIO 中什么是桶,什么是对象,也给出了操作桶和操作对象的API。

在 MinIO 中, 对象 = 中间前缀 + 对象名称 。如何判定对象是否存在呢?

分析

在 MinIO 中并没有提供判断对象是否存在的操作,但是提供了 getObjectstatObject 两个相关接口。其中 getObject 用来获取对象,statObject 用来获取对象的元数据信息。

官方没有提供判断对象是否存在的接口,就可以间接使用 getObjectstatObject 来判断。

以下将使用Java代码查看示例两个这两个操作

实现

getObject

 /**
     * 使用 getObjct 操作判断对象是否存在
     * 
     * @param bktName 桶名称
     * @param objName 对象名称
     * @return
     */
    @GetMapping("exist-get")
    public boolean existByGetObject(String bktName, String objName) {
        if (bktName == null || bktName.isEmpty()) {
            return false;
        }
        if (objName == null || objName.isEmpty()) {
            return false;
        }

        GetObjectArgs getObjectArgs = GetObjectArgs.builder()
                .bucket(bktName)
                .object(objName)
                .build();
        try {
            GetObjectResponse response = minioClient.getObject(getObjectArgs);
            return Objects.nonNull(response);
        } catch (InvalidKeyException | ErrorResponseException | InsufficientDataException | InternalException
                | InvalidResponseException | NoSuchAlgorithmException | ServerException | XmlParserException
                | IOException e) {
            e.printStackTrace();
            return false;
        }
    }

  

statObject

  /**
     * 使用 statObject 操作判断对象是否存在
     * 
     * @param bktName
     * @param objName
     * @return
     */
    @GetMapping("exist-stat")
    public boolean objectExist(String bktName, String objName) {
        if (bktName == null || bktName.isEmpty()) {
            return false;
        }
        if (objName == null || objName.isEmpty()) {
            return false;
        }
        StatObjectArgs args = StatObjectArgs.builder()
                .bucket(bktName)
                .object(objName)
                .build();
        try {
            StatObjectResponse response = minioClient.statObject(args);
            return Objects.nonNull(response);
        } catch (InvalidKeyException | ErrorResponseException | InsufficientDataException | InternalException
                | InvalidResponseException | NoSuchAlgorithmException | ServerException | XmlParserException
                | IOException e) {
            e.printStackTrace();
        }
        return false;
    }

测试

Minio 数据如下

在这里插入图片描述

测试结果

启动项目后分别测试两个接口

getObject 操作的接口测试通过
在这里插入图片描述
statObject 操作的接口测试通过
在这里插入图片描述

很显然,两种方法都能判断对象是否存在。

注意 objName 的值 home/user/tmp/1705648247514/服务导入模板.xls ,改为 /home/user/tmp/1705648247514/服务导入模板.xls 也可以通过测试。

也就是说,objName 最前面的 / 可选。

如何选择

getObject 更多在对对象进行流操作时使用,其返回值 GetObjectResponseFilterInputStream 的子类。
statObject 更多在只单纯地查看对象是否存在时使用。

getObject 会直接返回对象流,而statObject 只是返回元数据信息。

相关文章

  • Windows 下使用Docker 安装 minio
  • SpringBoot 整合 MinIO 实践
  • Minio数据模型

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code Json格式化插件-JSON formatter

🦪整个文件格式化 按快捷键Shift Alt F 🥪仅格式化选择内容 需要选择完整的json段落即:{} 或 [] 括起来的部分,再按快捷键Ctrl K F

激光雷达行业梳理1-概述、市场、技术路线

激光雷达作为现代精确测距和感知技术的关键组成部分,在近几年里取得了令人瞩目的发展。作为自动驾驶感知层面的重要一环,相较摄像头、毫米波雷达等其他传感器具有“ 精准、快速、高效作业”的巨大优势,已成为自动驾驶的主传感器之一&#xff…

芋道--如何自定义业务表单,配置对应的工作流程(详细步骤)

需求描述: 芋道的动态表单就不再介绍了,相对来讲比较简单,跟着官网文档就可以实现,本文将详细的介绍如何新建独立的业务表记录申请的信息,并设计对应的工作流。 这里表中的每一条记录,都将通过流程实例编号(process_instance_id )…

mysql-进阶篇

文章目录 存储引擎MySQL体系结构相关操作 存储引擎特点InnoDBInnoDB 逻辑存储结构 MyISAMMemory三个存储引擎之间的区别存储引擎的选择 索引1. 索引结构B-TreeB-Tree (多路平衡查找树)B-Tree演变过程 BTree与 B-Tree 的区别BTree演变过程 Hash 2.索引分类3.索引语法演示 4.SQL性…

946. 验证栈序列(力扣)

946. 验证栈序列 Problem: 946. 验证栈序列 文章目录 思路解题方法复杂度Code 思路 对栈的使用 解题方法 1.我们可以通过把pushed重新一个一个入我们自己创建的栈如果某次入栈碰到与poped第一个元素相同的那我们就对poped出栈处理(即跳过第一个元素);如此循环,直到我们的栈到最…

【C++记忆站】类和对象(二)

类和对象(二) 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员…

使用DTS实现TiDB到GaiaDB数据迁移

1 概览 本文主要介绍通过 DTS 数据迁移功能,结合消息服务 for Kafka 与 TiDB 数据库的 Pump、Drainer 组件,完成从TiDB迁移至百度智能云云原生数据库 GaiaDB。 消息服务 for Kafka:详细介绍参见:消息服务 for Kafka 产品介绍百度智…

Ubuntu Desktop 隐藏 / 显示文件和文件夹

Ubuntu Desktop 隐藏 / 显示文件和文件夹 1. GUI hot key2. Show hidden and backup filesReferences 1. GUI hot key Ctrl H: 隐藏 / 显示文件和文件夹 2. Show hidden and backup files Edit -> Preferences -> Views References [1] Yongqiang Cheng, https://yo…

AI大概不会很快抢走你的饭碗哦!

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

交互式AI百舸争流,声通科技要再次破题实现IPO?

仅隔半年,声通科技两次递表可以窥见其上市势在必行的决心。 事实也确实如此,由于对赌期限在即,声通科技上市迫在眉睫。 招股书显示,若声通科技未能于2024年12月31日之前完成合资格首次公开发售。那么声通科技及其创始人将赎回已…

Redis服务端优化(持久化配置、慢查询、命令及安全配置、内存配置)

文章目录 持久化配置慢查询命令及安全配置内存配置 持久化配置 慢查询 命令及安全配置 漏洞:Redis未授权访问配合SSH key文件利用分析-腾讯云开发者社区-腾讯云 (tencent.com) 漏洞出现的核心的原因有以下几点 Redis未设置密码利用了Redis的config set命令动态修…

Go 基本数据

第 2 章 基本数据类型 Go 的数值类型包括了不同大小的整数 、浮点数 、复数; 各种数值类型分别有自己的大小,对正负号支持也各不相同; 1. 整数(OK) 整数类型(整型)整数类型Go 语言同时支持 有…

VUE---插槽

一、插槽的作用&场景 1、在封装组件的时候&#xff0c;将可变的结构设计为插槽&#xff08;<slot></slot>&#xff09; 2、使用上述组件的时候&#xff0c;可以按需为插槽提供自定义的结构&#xff0c;以达到复用组件且高度自定的效果 二、基本语法 1、组件内…

关于网络安全 的 ARP欺骗 实验操作

实验设备&#xff1a; Windows server 2008 kali 1. vmware--上面菜单栏--虚拟机--设置--网络--NAT 模式 确定靶机与攻击机的连通性&#xff08;互相能 ping 通&#xff09; 靶机查看 arp 表&#xff08;arp -a&#xff09; 查看攻击机(kali)物理地址&#xff08;ip addr&…

MIT 6s081 lab4.xv6进程调度

xv6进程调度 在xv6中&#xff0c;调度发生的两种情况&#xff1a; 时钟中断导致的进程切换&#xff08;也叫时间片轮转&#xff09;睡眠锁&#xff0c;当进程调用sleep时&#xff0c;发生cpu的调度 xv6进程相关概念 xv6用struct proc来描述进程 // Per-process state stru…

uvicorn日志清空问题以及uvicorn日志配置

uvicorn日志清空问题 1、配置&#xff1a; uvicorn starlette 2、现象描述&#xff1a; 当我使用uvicorn starlette进行Python web开发的时候&#xff0c;本来想把所有的日志都打印到一个文件里面&#xff0c;于是我写了一个启动脚本&#xff0c;所有的日志都输出到log.t…

最大流-Dinic算法,原理详解,四大优化,详细代码

文章目录 零、前言一、概念回顾(可略过)1.1流网络1.2流1.3最大流1.4残留网络1.5增广路径1.6流网络的割1.7最大流最小割定理1.7.1证明 1.8Ford-Fulkerson方法 二、Dinic算法2.1EK算法的可优化之处2.2Dinic算法的优化策略2.3Dinic算法原理2.3.1找增广路2.3.2更新剩余容量 2.4算法…

浏览器无网

目录 1.运行网络诊断&#xff0c;确认原因 原因A.远程计算机或设备将不接受连接(该设备或资源(Web 代理)未设置为接受端口“7890”上的连接 原因B.DNS服务器未响应 场景A.其他的浏览器可以打开网页&#xff0c;自带的Edge却不行 方法A&#xff1a;关闭代理 Google自带翻译…

<C++>STL->vector

vector的介绍 vector的使用文档 vector是一个可改变数组大小的序列容器vector和数组一样采取连续的空间存放数据&#xff0c;可以使用方括号访问vector的元素&#xff0c;和数组一样高效。但是vector的大小可以动态增长&#xff0c;而数组不行实际上vector内部使用一个动态分…

MySQL-SQL-DQL

DQL-介绍 DQL-语法 基本查询 1、查询多个字段 2、设置别名 3、去除重复记录 条件查询 1、语法 2、条件 聚合函数 1、介绍 2、常见的聚合函数 3、语法 分组查询 1、语法 2、where与having区别 排序查询 1、语法 2、排序方式 分页查询 1、语法 DQL-执行顺序