SpringBoot2 整合MinIO中間件,實現文件便捷管理

一、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

: minioadmin

SecretKey

: minioadmin/<code>

這裡就是登錄地址和賬號密碼。

三、整合SpringBoot環境

1、基礎依賴

<code>

<

dependency

>

<

groupId

>

org.springframework.boot

groupId

>

<

artifactId

>

spring-boot-starter-web

artifactId

>

dependency

>

<

dependency

>

<

groupId

>

io.minio

groupId

>

<

artifactId

>

minio

artifactId

>

<

version

>

3.0.12

version

>

dependency

>

/<code>

2、基礎配置

配置要素:地址和端口,登錄名,密碼,HTML存儲桶,圖片存儲桶。


SpringBoot2 整合MinIO中間件,實現文件便捷管理


<code>

minio

:

endpoint

:

http

:

accessKey

: minioadmin

secretKey

: minioadmin

bucketNameHtml

: html

bucketNameImage

: image/<code>

文件上傳之後,可以基於文件地址直接訪問,但是需要在MinIO中配置文件的讀寫權限:

SpringBoot2 整合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

String

uploadHtml

(String fileName, String filePath)

throws

Exception

{ minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);

return

paramConfig.getEndpoint()+

"/"

+paramConfig.getBucketNameHtml()+

"/"

+fileName ; }

public

String

uploadImg

(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

String

uploadHtml

(String fileName, String filePath)

throws

Exception

{

return

minIOConfig.uploadHtml(fileName,filePath); }

public

String

uploadImg

(String imgName, String imgPath)

throws

Exception

{

return

minIOConfig.uploadImg(imgName,imgPath); } }/<code>

上傳之後,基於瀏覽器訪問接口返回的url,查看效果:

SpringBoot2 整合MinIO中間件,實現文件便捷管理

推薦閱讀:GitHub源碼和分類管理,持續更新

SpringBoot2 整合 Drools規則引擎,實現高效的業務規則

SpringBoot2 整合FreeMarker模板,完成頁面靜態化處理

SpringBoot2 配置多數據源,整合MybatisPlus增強插件

SpringBoot2.0 整合 Dubbo框架 ,實現RPC服務遠程調用

SpringBoot2.0 整合 RocketMQ ,實現請求異步處理

專欄

微服務架構實戰

作者:知了一笑

9.9幣

15人已購

查看


分享到:


相關文章: