javascript
SpringBoot2 整合MinIO中间件,实现文件便捷管理
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
一、MinIO簡(jiǎn)介
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/data3、服務(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:9000accessKey: minioadminsecretKey: minioadminbucketNameHtml: htmlbucketNameImage: 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) ;@Resourceprivate ParamConfig paramConfig ;private MinioClient minioClient ;/*** 初始化 MinIO 客戶端*/@PostConstructprivate 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 {@Resourceprivate MinIOConfig minIOConfig ;// 上傳 <html> ,返回服務(wù)器地址@Overridepublic String uploadHtml(String fileName, String filePath) throws Exception {return minIOConfig.uploadHtml(fileName,filePath);}// 上傳 <img> ,返回服務(wù)器地址@Overridepublic 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推薦閱讀:SpringBoot進(jìn)階系列
| 01 | Boot2 整合 shard-jdbc 中間件,實(shí)現(xiàn)數(shù)據(jù)分庫(kù)分表 |
| 02 | Boot2 整合 JavaMail ,實(shí)現(xiàn)異步發(fā)送郵件功能 |
| 03 | Boot2 整合 RocketMQ ,實(shí)現(xiàn)請(qǐng)求異步處理 |
| 04 | Boot2 整合 Swagger2 ,構(gòu)建接口管理界面 |
| 05 | Boot2 整合 QuartJob ,實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理 |
| 06 | Boot2 整合 Redis集群 ,實(shí)現(xiàn)消息隊(duì)列場(chǎng)景 |
| 07 | Boot2 整合 Dubbo框架 ,實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用 |
| 08 | Boot2 整合 ElasticSearch框架,實(shí)現(xiàn)高性能搜索引擎 |
| 09 | Boot2 整合 JWT 框架,解決Token跨域驗(yàn)證問(wèn)題 |
| 10 | Boot2 整合 FastDFS 中間件,實(shí)現(xiàn)文件分布管理 |
| 11 | Boot2 整合 Shiro 框架,實(shí)現(xiàn)用戶權(quán)限管理 |
| 12 | Boot2 整合 Security 框架,實(shí)現(xiàn)用戶權(quán)限管理 |
| 13 | Boot2 整合 ClickHouse數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)高性能查詢分析 |
| 14 | Boot2 整合 Drools規(guī)則引擎,實(shí)現(xiàn)高效的業(yè)務(wù)規(guī)則 |
| 15 | Boot2 整合 多數(shù)據(jù)源,配置MybatisPlus增強(qiáng)插件 |
| 16 | Boot2 整合 Zookeeper組件,管理架構(gòu)中服務(wù)協(xié)調(diào) |
| 17 | Boot2 整合Nacos組件,環(huán)境搭建和入門案例詳解 |
| 18 | 文件系統(tǒng)(01):基于Boot2框架,管理Excel和PDF |
| 18 | 文件系統(tǒng)(02):基于Boot2框架,管理Xml和CSV |
| 19 | Boot2 整合 Kafka組件,應(yīng)用案例和流程詳解 |
| 20 | Boot2 整合 ElasticJob框架,定制化管理流程 |
| 21 | Boot2 整合JTA組件,多數(shù)據(jù)源事務(wù)管理 |
| 22 | Boot2 整合FreeMarker模板,完成頁(yè)面靜態(tài)化處理 |
總結(jié)
以上是生活随笔為你收集整理的SpringBoot2 整合MinIO中间件,实现文件便捷管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Fedora安装Nvidia显卡驱动方法
- 下一篇: ADO.NET Entity Frame