SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能
本文源碼:GitHub·點這里 || GitEE·點這里
一、MinIO簡介
MinIO是為了高性能和亞馬遜S3 API而設計的。MinIO非常適合對安全要求嚴格的大型私有云環(huán)境,在各工作負載下可保證高可用。
1、基礎描述
MinIO是一個開源的對象存儲服務。適合于存儲大容量非結構化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。
2、存儲機制
MinIO使用按對象的嵌入式擦除編碼保護數(shù)據(jù),該編碼以匯編代碼編寫,可提供最高的性能。MinIO使用Reed-Solomon代碼將對象劃分為n/2個數(shù)據(jù)和n / 2個奇偶校驗塊-盡管可以將它們配置為任何所需的冗余級別。 這意味著在12個驅動器設置中,將一個對象分片為6個數(shù)據(jù)和6個奇偶校驗塊。即使丟失了多達5個((n/2)–1)個驅動器(無論是奇偶校驗還是數(shù)據(jù)),仍然可以從其余驅動器可靠地重建數(shù)據(jù)。MinIO的實現(xiàn)可確保即使丟失或無法使用多個設備,也可以讀取對象或寫入新對象。最后,MinIO的擦除代碼位于對象級別,并且可以一次修復一個對象。
二、MinIO環(huán)境搭建
1、安裝包下載
https://dl.min.io/server/minio/release/linux-amd64/minio
建議使用某雷下載,速度會快點,下載包上傳到/opt/minioconfig/run目錄下。
2、創(chuàng)建數(shù)據(jù)存儲目錄
mkdir -p /data/minio/data
3、服務啟動
啟動并指定數(shù)據(jù)存放地址
/opt/minioconfig/run/minio server /data/minio/data/
輸出日志
Endpoint: http://localhost:9000 http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin
這里就是登錄地址和賬號密碼。
三、整合SpringBoot環(huán)境
1、基礎依賴
<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>
2、基礎配置
配置要素:地址和端口,登錄名,密碼,HTML存儲桶,圖片存儲桶。

minio: endpoint: http://192.168.72.133:9000 accessKey: minioadmin secretKey: minioadmin bucketNameHtml: html bucketNameImage: image
文件上傳之后,可以基于文件地址直接訪問,但是需要在MinIO中配置文件的讀寫權限:

3、配置參數(shù)類
@Component
@ConfigurationProperties(prefix = "minio")
public class ParamConfig {
private String endpoint ;
private String accessKey ;
private String secretKey ;
private String bucketNameHtml ;
private String bucketNameImage ;
// 省略 get 和 set方法
}
4、基于MinIO配置類
封裝MinIO客戶端連接工具,文件上傳的基礎方法,返回文件在MinIO服務上的URL地址。
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;
@Component
public class MinIOConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(MinIOConfig.class) ;
@Resource
private ParamConfig paramConfig ;
private MinioClient minioClient ;
/**
* 初始化 MinIO 客戶端
*/
@PostConstruct
private void init(){
try {
minioClient = new MinioClient(paramConfig.getEndpoint(),
paramConfig.getAccessKey(),
paramConfig.getSecretKey());
} catch (Exception e) {
e.printStackTrace();
LOGGER.info("MinIoClient init fail ...");
}
}
/**
* 上傳 <html> 頁面
*/
public String uploadHtml (String fileName, String filePath) throws Exception {
minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);
return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;
}
/**
* 上傳 <img> 圖片
*/
public String uploadImg (String imgName, String imgPath) throws Exception {
minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);
return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;
}
}
5、服務實現(xiàn)
提供兩個基礎方法:HTML和圖片上傳,存儲在不同位置。
import com.minio.file.config.MinIOConfig;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UploadServiceImpl implements UploadService {
@Resource
private MinIOConfig minIOConfig ;
// 上傳 <html> ,返回服務器地址
@Override
public String uploadHtml(String fileName, String filePath) throws Exception {
return minIOConfig.uploadHtml(fileName,filePath);
}
// 上傳 <img> ,返回服務器地址
@Override
public String uploadImg(String imgName, String imgPath) throws Exception {
return minIOConfig.uploadImg(imgName,imgPath);
}
}
上傳之后,基于瀏覽器訪問接口返回的url,查看效果:

四、源代碼地址
GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent
到此這篇關于SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能的文章就介紹到這了,更多相關SpringBoot2 整合MinIO中間件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring實戰(zhàn)之調用實例工廠方法創(chuàng)建Bean操作示例
這篇文章主要介紹了Spring實戰(zhàn)之調用實例工廠方法創(chuàng)建Bean操作,結合實例形式分析了實例工廠方法創(chuàng)建Bean相關配置、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11
Springboot?+redis+谷歌開源Kaptcha實現(xiàn)圖片驗證碼功能
這篇文章主要介紹了Springboot?+redis+?歌開源Kaptcha實現(xiàn)圖片驗證碼功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
關于@Controller和@Restcontroller的那點奇葩事
這篇文章主要介紹了關于@Controller和@Restcontroller的那點奇葩事,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Java編程實現(xiàn)基于圖的深度優(yōu)先搜索和廣度優(yōu)先搜索完整代碼
這篇文章主要介紹了Java編程實現(xiàn)基于圖的深度優(yōu)先搜索和廣度優(yōu)先搜索完整代碼,具有一定借鑒價值,需要的朋友可以了解下。2017-12-12
Java模擬實現(xiàn)HTTP服務器項目實戰(zhàn)
本文主要介紹了Java模擬實現(xiàn)HTTP服務器項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
Jpa 如何使用@EntityListeners 實現(xiàn)實體對象的自動賦值
這篇文章主要介紹了Jpa 如何使用@EntityListeners 實現(xiàn)實體對象的自動賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

