欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2024年01月24日 09:08:11   作者:祺稷  
這篇文章主要介紹了Java中MinIO的常用操作示例,MinIO 是一款基于Go語言發(fā)開的高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng),客戶端支持Java,Net,Python,Javacript, Golang語言,需要的朋友可以參考下

MinIO簡(jiǎn)介

MinIO 是一款基于Go語言發(fā)開的高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng)??蛻舳酥С諮ava,Net,Python,Javacript, Golang語言。

MinIO 英文官網(wǎng) 中文官網(wǎng) 注:中文官方更新不及時(shí),會(huì)有很多坑,最好以英文官網(wǎng)為準(zhǔn)

基礎(chǔ)概念

1、Object:存儲(chǔ)到minio的基本對(duì)象,如圖片、文件,字節(jié)流,Anything

2、Bucket:用來存儲(chǔ)Object的邏輯空間。每個(gè)Bucket之間的數(shù)據(jù)是互相隔離的。對(duì)于客戶端而言,就相當(dāng)于存放文件的頂層文件夾。

應(yīng)用場(chǎng)景

非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從 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工具類,獲取客戶端、查詢、創(chuàng)建桶、對(duì)象等

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;
    }
}

到此這篇關(guān)于Java中使用MinIO的常用操作示例的文章就介紹到這了,更多相關(guān)MinIO的常用操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot內(nèi)置tomcat調(diào)優(yōu)并發(fā)線程數(shù)解析

    springboot內(nèi)置tomcat調(diào)優(yōu)并發(fā)線程數(shù)解析

    這篇文章主要介紹了springboot內(nèi)置tomcat調(diào)優(yōu)并發(fā)線程數(shù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 一文帶你剖析Redisson分布式鎖的原理

    一文帶你剖析Redisson分布式鎖的原理

    相信使用過redis的,或者正在做分布式開發(fā)的童鞋都知道redisson組件,它的功能很多,但我們使用最頻繁的應(yīng)該還是它的分布式鎖功能,少量的代碼,卻實(shí)現(xiàn)了加鎖、鎖續(xù)命(看門狗)、鎖訂閱、解鎖、鎖等待(自旋)等功能,我們來看看都是如何實(shí)現(xiàn)的
    2022-11-11
  • Java對(duì)象的序列化與反序列化詳解

    Java對(duì)象的序列化與反序列化詳解

    這篇文章主要為大家詳細(xì)介紹了Java對(duì)象的序列化與反序列化的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • eclipse中自動(dòng)生成javadoc文檔的方法

    eclipse中自動(dòng)生成javadoc文檔的方法

    這篇文章主要介紹了eclipse中自動(dòng)生成javadoc文檔的方法,是實(shí)用eclipse開發(fā)Java程序時(shí)非常實(shí)用的技巧,對(duì)于進(jìn)行Java項(xiàng)目開發(fā)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • SpringCloud整合Consul的實(shí)現(xiàn)

    SpringCloud整合Consul的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud整合Consul的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn)

    maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn)

    開發(fā)項(xiàng)目時(shí)會(huì)遇到這個(gè)問題:開發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境的配置文件不同, 打包時(shí)經(jīng)常要手動(dòng)更改配置文件,本文就來介紹一下maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • SpringBoot使用Prometheus采集自定義指標(biāo)數(shù)據(jù)的方法詳解

    SpringBoot使用Prometheus采集自定義指標(biāo)數(shù)據(jù)的方法詳解

    隨著微服務(wù)在生產(chǎn)環(huán)境大規(guī)模部署和應(yīng)用,隨之而來也帶來了新的問題,其中比較關(guān)鍵的就是關(guān)于微服務(wù)的運(yùn)維和監(jiān)控,本文將結(jié)合微服務(wù)運(yùn)維監(jiān)控中的指標(biāo)監(jiān)控進(jìn)行詳細(xì)的說明,需要的朋友可以參考下
    2024-07-07
  • springcloud nacos的賦值均衡和動(dòng)態(tài)刷新

    springcloud nacos的賦值均衡和動(dòng)態(tài)刷新

    nacos是一個(gè)分布式的配置中心和注冊(cè)發(fā)現(xiàn)中心,這篇文章主要介紹了springcloud nacos的賦值均衡和動(dòng)態(tài)刷新,需要的朋友可以參考下
    2024-05-05
  • java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹

    java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹

    這篇文章主要介紹了java數(shù)據(jù)類型與二進(jìn)制詳細(xì)介紹的相關(guān)資料,這里對(duì)數(shù)據(jù)類型進(jìn)行了一一介紹分析,并說明自動(dòng)轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換,需要的朋友可以參考下
    2017-07-07
  • postman中POST請(qǐng)求時(shí)參數(shù)包含參數(shù)list設(shè)置方式

    postman中POST請(qǐng)求時(shí)參數(shù)包含參數(shù)list設(shè)置方式

    這篇文章主要介紹了postman中POST請(qǐng)求時(shí)參數(shù)包含參數(shù)list設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評(píng)論