最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • java-synchronized 嵌套使用代碼詳解

    java-synchronized 嵌套使用代碼詳解

    本文以synchronized 的同步造成了死鎖為例,介紹了java-synchronized 嵌套使用代碼詳解,同時(shí)對(duì)鎖和死鎖的概念進(jìn)行了說明,需要的朋友可以了解下。
    2017-09-09
  • Java的idea連接mongodb數(shù)據(jù)庫的詳細(xì)教程

    Java的idea連接mongodb數(shù)據(jù)庫的詳細(xì)教程

    這篇文章主要介紹了Java的idea連接mongodb數(shù)據(jù)庫的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot同一接口多個(gè)實(shí)現(xiàn)類配置的實(shí)例詳解

    SpringBoot同一接口多個(gè)實(shí)現(xiàn)類配置的實(shí)例詳解

    這篇文章主要介紹了SpringBoot同一接口多個(gè)實(shí)現(xiàn)類配置的實(shí)例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java結(jié)構(gòu)型設(shè)計(jì)模式之組合模式詳解

    Java結(jié)構(gòu)型設(shè)計(jì)模式之組合模式詳解

    組合模式,又叫部分整體模式,它創(chuàng)建了對(duì)象組的數(shù)據(jù)結(jié)構(gòu)組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的訪問具有一致性。本文將通過示例為大家詳細(xì)介紹一下組合模式,需要的可以參考一下
    2022-09-09
  • SpringBoot基于docx4j實(shí)現(xiàn)DOCX轉(zhuǎn)PDF的具體方案

    SpringBoot基于docx4j實(shí)現(xiàn)DOCX轉(zhuǎn)PDF的具體方案

    在日常項(xiàng)目開發(fā)中,我們經(jīng)常遇到用戶上傳 Word( .docx)文件,希望后臺(tái)自動(dòng)生成 PDF,用于下載、歸檔或在線預(yù)覽,本文將介紹一個(gè)完全開源、部署簡(jiǎn)單、純 Java 的實(shí)現(xiàn)方案,感興趣的小伙伴可以跟著小編一起來看看
    2025-11-11
  • Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解詳析

    Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解詳析

    編譯時(shí)注解相信對(duì)每一個(gè)java開發(fā)者來說都不陌生,下面這篇文章主要給大家介紹了關(guān)于Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05
  • mybatis中的擴(kuò)展實(shí)現(xiàn)源碼解析

    mybatis中的擴(kuò)展實(shí)現(xiàn)源碼解析

    這篇文章主要介給大家紹了關(guān)于mybatis中擴(kuò)展實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 解析java中super的用法分析

    解析java中super的用法分析

    本篇文章是對(duì)java中super的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • SpringBoot+POI實(shí)現(xiàn)給word添加水印功能

    SpringBoot+POI實(shí)現(xiàn)給word添加水印功能

    這篇文章主要介紹了SpringBoot+POI實(shí)現(xiàn)給word添加水印功能,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 使用jxls自定義命令設(shè)置動(dòng)態(tài)行高

    使用jxls自定義命令設(shè)置動(dòng)態(tài)行高

    這篇文章主要介紹了使用jxls自定義命令設(shè)置動(dòng)態(tài)行高,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

古田县| 平陆县| 慈利县| 泗水县| 合肥市| 枣阳市| 武胜县| 阿图什市| 桦甸市| 社旗县| 新密市| 宜章县| 民县| 大丰市| 东阳市| 调兵山市| 科技| 白水县| 册亨县| 枣阳市| 梅河口市| 陵川县| 枝江市| 彭水| 金阳县| 湛江市| 安徽省| 合山市| 承德县| 增城市| 沈阳市| 剑阁县| 鞍山市| 汉川市| 思南县| 塔河县| 都江堰市| 栖霞市| 伊宁县| 凤台县| 黄平县|