一、MinIO簡介
1、基礎描述
MinIO是一個開源的對象存儲服務。適合於存儲大容量非結構化的數據,例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。
2、存儲機制
MinIO使用按對象的嵌入式擦除編碼保護數據,該編碼以彙編代碼編寫,可提供最高的性能。MinIO使用Reed-Solomon代碼將對象劃分為n/2個數據和n / 2個奇偶校驗塊-儘管可以將它們配置為任何所需的冗餘級別。 這意味著在12個驅動器設置中,將一個對象分片為6個數據和6個奇偶校驗塊。即使丟失了多達5個((n/2)–1)個驅動器(無論是奇偶校驗還是數據),仍然可以從其餘驅動器可靠地重建數據。MinIO的實現可確保即使丟失或無法使用多個設備,也可以讀取對象或寫入新對象。最後,MinIO的擦除代碼位於對象級別,並且可以一次修復一個對象。
二、MinIO環境搭建
1、安裝包下載
<code>https:
//dl.min.io/server
/minio/release
/linux-amd64/minio
/<code>
建議使用某雷下載,速度會快點,下載包上傳到/opt/minioconfig/run目錄下。
2、創建數據存儲目錄
<code>mkdir -p /data
/minio/data
/<code>
3、服務啟動
啟動並指定數據存放地址
<code>/opt/minioconfig/run/minio server /data
/minio/data
//<code>
輸出日誌
<code>Endpoint
:http
:AccessKey
: minioadminSecretKey
: minioadmin/<code>
這裡就是登錄地址和賬號密碼。
三、整合SpringBoot環境
1、基礎依賴
<code><
dependency
><
groupId
>org.springframework.bootgroupId
><
artifactId
>spring-boot-starter-webartifactId
>dependency
><
dependency
><
groupId
>io.miniogroupId
><
artifactId
>minio
artifactId
><
version
>3.0.12version
>dependency
>/<code>
2、基礎配置
配置要素:地址和端口,登錄名,密碼,HTML存儲桶,圖片存儲桶。
<code>minio
:endpoint
:http
:accessKey
: minioadminsecretKey
: minioadminbucketNameHtml
: htmlbucketNameImage
: image/<code>
文件上傳之後,可以基於文件地址直接訪問,但是需要在MinIO中配置文件的讀寫權限:
3、配置參數類
<code> (prefix ="minio"
)public
class
ParamConfig {private
String
endpoint ;private
String
accessKey ;private
String
secretKey ;private
String
bucketNameHtml ;private
String
bucketNameImage ; }/<code>
4、基於MinIO配置類
封裝MinIO客戶端連接工具,文件上傳的基礎方法,返回文件在MinIO服務上的URL地址。
<code>import
io.minio.MinioClient;import
org.slf4j.Logger;import
org.slf4j.LoggerFactory;import
org.springframework.stereotype.Component;import
javax.annotation.PostConstruct;import
javax.annotation.Resource;public
class
MinIOConfig
{private
static
final
Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.
class
) ;private
ParamConfig paramConfig ;private
MinioClient minioClient ;private
void
init
()
{try
{ minioClient =new
MinioClient(paramConfig.getEndpoint(), paramConfig.getAccessKey(), paramConfig.getSecretKey()); }catch
(Exception e) { e.printStackTrace(); LOGGER.info("MinIoClient init fail ..."
); } }public
StringuploadHtml
(String fileName, String filePath)
throws
Exception { minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);return
paramConfig.getEndpoint()+"/"
+paramConfig.getBucketNameHtml()+"/"
+fileName ; }public
StringuploadImg
(String imgName, String imgPath)
throws
Exception { minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);return
paramConfig.getEndpoint()+"/"
+paramConfig.getBucketNameImage()+"/"
+imgName ; } }/<code>
5、服務實現
提供兩個基礎方法:HTML和圖片上傳,存儲在不同位置。
<code>import
com.minio.file.config.MinIOConfig;import
org.springframework.stereotype.Service;import
javax.annotation.Resource;public
class
UploadServiceImpl
implements
UploadService
{private
MinIOConfig minIOConfig ;public
StringuploadHtml
(String fileName, String filePath)
throws
Exception {return
minIOConfig.uploadHtml(fileName,filePath); }public
StringuploadImg
(String imgName, String imgPath)
throws
Exception {return
minIOConfig.uploadImg(imgName,imgPath); } }/<code>
上傳之後,基於瀏覽器訪問接口返回的url,查看效果:
推薦閱讀:GitHub源碼和分類管理,持續更新
SpringBoot2 整合 Drools規則引擎,實現高效的業務規則
SpringBoot2 整合FreeMarker模板,完成頁面靜態化處理
SpringBoot2 配置多數據源,整合MybatisPlus增強插件
SpringBoot2.0 整合 Dubbo框架 ,實現RPC服務遠程調用
SpringBoot2.0 整合 RocketMQ ,實現請求異步處理
專欄
微服務架構實戰
9.9幣
15人已購