SpringBoot2 整合MinIO中間件實(shí)現(xiàn)文件便捷管理功能
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
一、MinIO簡(jiǎn)介
MinIO是為了高性能和亞馬遜S3 API而設(shè)計(jì)的。MinIO非常適合對(duì)安全要求嚴(yán)格的大型私有云環(huán)境,在各工作負(fù)載下可保證高可用。
1、基礎(chǔ)描述
MinIO是一個(gè)開源的對(duì)象存儲(chǔ)服務(wù)。適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。
MinIO是一個(gè)非常輕量的服務(wù),可以很簡(jiǎn)單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。
2、存儲(chǔ)機(jī)制
MinIO使用按對(duì)象的嵌入式擦除編碼保護(hù)數(shù)據(jù),該編碼以匯編代碼編寫,可提供最高的性能。MinIO使用Reed-Solomon代碼將對(duì)象劃分為n/2個(gè)數(shù)據(jù)和n / 2個(gè)奇偶校驗(yàn)塊-盡管可以將它們配置為任何所需的冗余級(jí)別。 這意味著在12個(gè)驅(qū)動(dòng)器設(shè)置中,將一個(gè)對(duì)象分片為6個(gè)數(shù)據(jù)和6個(gè)奇偶校驗(yàn)塊。即使丟失了多達(dá)5個(gè)((n/2)–1)個(gè)驅(qū)動(dòng)器(無(wú)論是奇偶校驗(yàn)還是數(shù)據(jù)),仍然可以從其余驅(qū)動(dòng)器可靠地重建數(shù)據(jù)。MinIO的實(shí)現(xiàn)可確保即使丟失或無(wú)法使用多個(gè)設(shè)備,也可以讀取對(duì)象或?qū)懭胄聦?duì)象。最后,MinIO的擦除代碼位于對(duì)象級(jí)別,并且可以一次修復(fù)一個(gè)對(duì)象。
二、MinIO環(huán)境搭建
1、安裝包下載
https://dl.min.io/server/minio/release/linux-amd64/minio
建議使用某雷下載,速度會(huì)快點(diǎn),下載包上傳到/opt/minioconfig/run
目錄下。
2、創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄
mkdir -p /data/minio/data
3、服務(wù)啟動(dòng)
啟動(dòng)并指定數(shù)據(jù)存放地址
/opt/minioconfig/run/minio server /data/minio/data/
輸出日志
Endpoint: http://localhost:9000 http://127.0.0.1:9000
AccessKey: minioadmin
SecretKey: minioadmin
這里就是登錄地址和賬號(hào)密碼。
三、整合SpringBoot環(huán)境
1、基礎(chǔ)依賴
<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、基礎(chǔ)配置
配置要素:地址和端口,登錄名,密碼,HTML存儲(chǔ)桶,圖片存儲(chǔ)桶。
minio: endpoint: http://192.168.72.133:9000 accessKey: minioadmin secretKey: minioadmin bucketNameHtml: html bucketNameImage: image
文件上傳之后,可以基于文件地址直接訪問(wèn),但是需要在MinIO中配置文件的讀寫權(quán)限:
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客戶端連接工具,文件上傳的基礎(chǔ)方法,返回文件在MinIO服務(wù)上的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> 頁(yè)面 */ 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、服務(wù)實(shí)現(xiàn)
提供兩個(gè)基礎(chǔ)方法:HTML和圖片上傳,存儲(chǔ)在不同位置。
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> ,返回服務(wù)器地址 @Override public String uploadHtml(String fileName, String filePath) throws Exception { return minIOConfig.uploadHtml(fileName,filePath); } // 上傳 <img> ,返回服務(wù)器地址 @Override public String uploadImg(String imgName, String imgPath) throws Exception { return minIOConfig.uploadImg(imgName,imgPath); } }
上傳之后,基于瀏覽器訪問(wèn)接口返回的url,查看效果:
四、源代碼地址
GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent
到此這篇關(guān)于SpringBoot2 整合MinIO中間件實(shí)現(xiàn)文件便捷管理功能的文章就介紹到這了,更多相關(guān)SpringBoot2 整合MinIO中間件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring實(shí)戰(zhàn)之調(diào)用實(shí)例工廠方法創(chuàng)建Bean操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之調(diào)用實(shí)例工廠方法創(chuàng)建Bean操作,結(jié)合實(shí)例形式分析了實(shí)例工廠方法創(chuàng)建Bean相關(guān)配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11Springboot?+redis+谷歌開源Kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能
這篇文章主要介紹了Springboot?+redis+?歌開源Kaptcha實(shí)現(xiàn)圖片驗(yàn)證碼功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01關(guān)于@Controller和@Restcontroller的那點(diǎn)奇葩事
這篇文章主要介紹了關(guān)于@Controller和@Restcontroller的那點(diǎn)奇葩事,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java編程實(shí)現(xiàn)基于圖的深度優(yōu)先搜索和廣度優(yōu)先搜索完整代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)基于圖的深度優(yōu)先搜索和廣度優(yōu)先搜索完整代碼,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12Java模擬實(shí)現(xiàn)HTTP服務(wù)器項(xiàng)目實(shí)戰(zhàn)
本文主要介紹了Java模擬實(shí)現(xiàn)HTTP服務(wù)器項(xiàng)目實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對(duì)象的自動(dòng)賦值
這篇文章主要介紹了Jpa 如何使用@EntityListeners 實(shí)現(xiàn)實(shí)體對(duì)象的自動(dòng)賦值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java實(shí)現(xiàn)的漢語(yǔ)拼音工具類完整實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)的漢語(yǔ)拼音工具類,結(jié)合完整實(shí)例形式分析了java基于pinyin4j包實(shí)現(xiàn)編碼轉(zhuǎn)換的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11