Java中使用MinIO的常用操作示例
MinIO簡(jiǎn)介
MinIO 是一款基于Go語(yǔ)言發(fā)開的高性能、分布式的對(duì)象存儲(chǔ)系統(tǒng)??蛻舳酥С諮ava,Net,Python,Javacript, Golang語(yǔ)言。
MinIO 英文官網(wǎng) 中文官網(wǎng) 注:中文官方更新不及時(shí),會(huì)有很多坑,最好以英文官網(wǎng)為準(zhǔn)
基礎(chǔ)概念
1、Object:存儲(chǔ)到minio的基本對(duì)象,如圖片、文件,字節(jié)流,Anything
2、Bucket:用來(lái)存儲(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-12
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),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn)
開發(fā)項(xiàng)目時(shí)會(huì)遇到這個(gè)問(wèn)題:開發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境的配置文件不同, 打包時(shí)經(jīng)常要手動(dòng)更改配置文件,本文就來(lái)介紹一下maven中profile動(dòng)態(tài)打包不同環(huán)境配置文件的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10
SpringBoot使用Prometheus采集自定義指標(biāo)數(shù)據(jù)的方法詳解
隨著微服務(wù)在生產(chǎn)環(huán)境大規(guī)模部署和應(yīng)用,隨之而來(lái)也帶來(lái)了新的問(wèn)題,其中比較關(guān)鍵的就是關(guān)于微服務(wù)的運(yùn)維和監(jiān)控,本文將結(jié)合微服務(wù)運(yùn)維監(jiān)控中的指標(biāo)監(jiān)控進(jìn)行詳細(xì)的說(shuō)明,需要的朋友可以參考下2024-07-07
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ì)介紹的相關(guān)資料,這里對(duì)數(shù)據(jù)類型進(jìn)行了一一介紹分析,并說(shuō)明自動(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è)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

