Java中使用MinIO的常用操作示例

 更新时间:2024年01月24日 09:08:11   作者:祺稷  
这篇文章主要介绍了Java中MinIO的常用操作示例,MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统,客户端支持Java,Net,Python,Javacript, Golang语言,需要的朋友可以参考下

MinIO简介

MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。

MinIO 英文官网 中文官网 注:中文官方更新不及时,会有很多坑,最好以英文官网为准

基础概念

1、Object:存储到minio的基本对象,如图片、文件,字节流,Anything

2、Bucket:用来存储Object的逻辑空间。每个Bucket之间的数据是互相隔离的。对于客户端而言,就相当于存放文件的顶层文件夹。

应用场景

非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从 KB 到最大 TB 不等

Java客户端连接及操作代码示例

pom依赖引入

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.4.3</version>
</dependency>

Java连接操作

application.yml 配置文件 增加minio 地址及用户名密码的配置

minio:
  endpoint: http://xx.xx.xx.xx:xxxx
  accessKey: xxxx
  secretKey: xxxx

java工具类,获取客户端、查询、创建桶、对象等

import io.minio.*;
import io.minio.errors.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@Slf4j
@Service
public class MinIOUtil {
    @Value("${minio.endpoint}")
    private String endpoint;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secretKey}")
    private String secretKey;
    private MinIOUtil() {
    }
    private MinioClient getClient() {
        return MinioClient.builder()
                .endpoint(this.endpoint)
                .credentials(this.accessKey, this.secretKey)
                .build();
    }
    public boolean bucketExists(String bucketName) {
        try {
            return getClient().bucketExists(
                    BucketExistsArgs.builder()
                            .bucket(bucketName)
                            .build());
        } catch (Exception ex) {
            log.error("bucketExists异常", ex);
            return false;
        }
    }
    public boolean makeBucket(String bucketName) {
        try {
            getClient().makeBucket(
                    MakeBucketArgs.builder()
                            .bucket(bucketName)
                            .build());
        } catch (Exception ex) {
            log.error("makeBucket异常", ex);
            return false;
        }
        log.debug("makeBucket成功:{}", bucketName);
        return true;
    }
    public boolean mkdir(String bucketName, String dir) {
        try {
            getClient().putObject(
                    PutObjectArgs.builder()
                            .bucket(bucketName)
                            .object(dir)
                            .stream(new ByteArrayInputStream(new byte[] {}), 0, -1)
                            .build());
        } catch (Exception ex) {
            log.error("mkdir异常", ex);
            return false;
        }
        return true;
    }
    public boolean putObject(String bucketName, String objName, InputStream inputStream) {
        try {
            getClient().putObject(
                    PutObjectArgs.builder()
                            .bucket(bucketName)
                            .object(objName)
                            .stream(inputStream, inputStream.available(), -1)
                            .build());
        } catch (Exception ex) {
            log.error("putObject异常,bucketName:{},objName:{}", bucketName, objName, ex);
            return false;
        }
        log.debug("putObject成功,bucketName:{},objName:{}", bucketName, objName);
        return true;
    }
    public Iterable<Result<Item>> listObjects(String bucketName, String prefix) {
        return getClient().listObjects(ListObjectsArgs.builder()
                .bucket(bucketName)
                .prefix(prefix)
                .build());
    }
    public InputStream getObject(String bucketName, String objName) throws ServerException, InsufficientDataException,
            ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException,
            InvalidResponseException, XmlParserException, InternalException {
        return getClient().getObject(
                GetObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objName)
                        .build());
    }
    public boolean removeObject(String bucketName, String objName) {
        try {
            getClient().removeObject(
                    RemoveObjectArgs.builder()
                            .bucket(bucketName)
                            .object(objName)
                            .build());
        } catch (Exception ex) {
            log.error("removeObject异常", ex);
            return false;
        }
        return true;
    }
}

到此这篇关于Java中使用MinIO的常用操作示例的文章就介绍到这了,更多相关MinIO的常用操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot内置tomcat调优并发线程数解析

    springboot内置tomcat调优并发线程数解析

    这篇文章主要介绍了springboot内置tomcat调优并发线程数解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 一文带你剖析Redisson分布式锁的原理

    一文带你剖析Redisson分布式锁的原理

    相信使用过redis的,或者正在做分布式开发的童鞋都知道redisson组件,它的功能很多,但我们使用最频繁的应该还是它的分布式锁功能,少量的代码,却实现了加锁、锁续命(看门狗)、锁订阅、解锁、锁等待(自旋)等功能,我们来看看都是如何实现的
    2022-11-11
  • Java对象的序列化与反序列化详解

    Java对象的序列化与反序列化详解

    这篇文章主要为大家详细介绍了Java对象的序列化与反序列化的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • eclipse中自动生成javadoc文档的方法

    eclipse中自动生成javadoc文档的方法

    这篇文章主要介绍了eclipse中自动生成javadoc文档的方法,是实用eclipse开发Java程序时非常实用的技巧,对于进行Java项目开发具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • SpringCloud整合Consul的实现

    SpringCloud整合Consul的实现

    这篇文章主要介绍了SpringCloud整合Consul的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • maven中profile动态打包不同环境配置文件的实现

    maven中profile动态打包不同环境配置文件的实现

    开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同, 打包时经常要手动更改配置文件,本文就来介绍一下maven中profile动态打包不同环境配置文件的实现,感兴趣的可以了解一下
    2023-10-10
  • SpringBoot使用Prometheus采集自定义指标数据的方法详解

    SpringBoot使用Prometheus采集自定义指标数据的方法详解

    随着微服务在生产环境大规模部署和应用,随之而来也带来了新的问题,其中比较关键的就是关于微服务的运维和监控,本文将结合微服务运维监控中的指标监控进行详细的说明,需要的朋友可以参考下
    2024-07-07
  • springcloud nacos的赋值均衡和动态刷新

    springcloud nacos的赋值均衡和动态刷新

    nacos是一个分布式的配置中心和注册发现中心,这篇文章主要介绍了springcloud nacos的赋值均衡和动态刷新,需要的朋友可以参考下
    2024-05-05
  • java数据类型与二进制详细介绍

    java数据类型与二进制详细介绍

    这篇文章主要介绍了java数据类型与二进制详细介绍的相关资料,这里对数据类型进行了一一介绍分析,并说明自动转换和强制转换,需要的朋友可以参考下
    2017-07-07
  • postman中POST请求时参数包含参数list设置方式

    postman中POST请求时参数包含参数list设置方式

    这篇文章主要介绍了postman中POST请求时参数包含参数list设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论