Java中使用MinIO的常用操作示例
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ù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12eclipse中自動(dòng)生成javadoc文檔的方法
這篇文章主要介紹了eclipse中自動(dòng)生成javadoc文檔的方法,是實(shí)用eclipse開發(fā)Java程序時(shí)非常實(shí)用的技巧,對(duì)于進(jìn)行Java項(xiàng)目開發(fā)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12SpringCloud整合Consul的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud整合Consul的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01maven中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-10SpringBoot使用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-07springcloud nacos的賦值均衡和動(dòng)態(tài)刷新
nacos是一個(gè)分布式的配置中心和注冊(cè)發(fā)現(xiàn)中心,這篇文章主要介紹了springcloud nacos的賦值均衡和動(dòng)態(tài)刷新,需要的朋友可以參考下2024-05-05java數(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-07postman中POST請(qǐng)求時(shí)參數(shù)包含參數(shù)list設(shè)置方式
這篇文章主要介紹了postman中POST請(qǐng)求時(shí)參數(shù)包含參數(shù)list設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05