1. 程式人生 > >SpringBoot2 整合MinIO中介軟體,實現檔案便捷管理

SpringBoot2 整合MinIO中介軟體,實現檔案便捷管理

本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent) # 一、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、安裝包下載 ``` https://dl.min.io/server/minio/release/linux-amd64/minio ``` 建議使用某雷下載,速度會快點,下載包上傳到`/opt/minioconfig/run`目錄下。 ## 2、建立資料儲存目錄 ``` mkdir -p /data/minio/data ``` ## 3、服務啟動 啟動並指定資料存放地址 ``` /opt/minioconfig/run/minio server /data/minio/data/ ``` 輸出日誌 ``` Endpoint: http://localhost:9000 http://127.0.0.1:9000 AccessKey: minioadmin SecretKey: minioadmin ``` 這裡就是登入地址和賬號密碼。 # 三、整合SpringBoot環境 ## 1、基礎依賴 ```xml ``` ## 2、基礎配置 配置要素:地址和埠,登入名,密碼,HTML儲存桶,圖片儲存桶。 ![](https://img2020.cnblogs.com/blog/1691717/202007/1691717-20200727201649334-883250186.jpg) ```yml minio: endpoint: http://192.168.72.133:9000 accessKey: minioadmin secretKey: minioadmin bucketNameHtml: html bucketNameImage: image ``` 檔案上傳之後,可以基於檔案地址直接訪問,但是需要在MinIO中配置檔案的讀寫許可權: ![](https://img2020.cnblogs.com/blog/1691717/202007/1691717-20200727201707020-619042278.jpg) ## 3、配置引數類 ```java @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地址。 ```java 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 ..."); } } /** * 上傳 頁面 */ 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 ; } } ``` ## 5、服務實現 提供兩個基礎方法:HTML和圖片上傳,儲存在不同位置。 ```java 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 ; // 上傳 ,返回伺服器地址 @Override public String uploadHtml(String fileName, String filePath) throws Exception { return minIOConfig.uploadHtml(fileName,filePath); } // 上傳 ,返回伺服器地址 @Override public String uploadImg(String imgName, String imgPath) throws Exception { return minIOConfig.uploadImg(imgName,imgPath); } } ``` 上傳之後,基於瀏覽器訪問介面返回的url,檢視效果: ![](https://img2020.cnblogs.com/blog/1691717/202007/1691717-20200727201727635-676465520.jpg) # 四、原始碼地址 ``` GitHub·地址 https://github.com/cicadasmile/middle-ware-parent GitEE·地址 https://gitee.com/cicadasmile/middle-ware-parent ``` ![](https://img2018.cnblogs.com/blog/1691717/201908/1691717-20190823075428183-1996768914.png) **推薦閱讀:SpringBoot進階系列** |序號|文章標題| |:---:|:---| |01|[Boot2 整合 shard-jdbc 中介軟體,實現資料分庫分表](https://mp.weixin.qq.com/s/XNFjOyzUfeR6zMrlvNPB8g)| |02|[Boot2 整合 JavaMail ,實現非同步傳送郵件功能](https://mp.weixin.qq.com/s/hadAFqK-w394K4XPWplANw)| |03|[Boot2 整合 RocketMQ ,實現請求非同步處理](https://mp.weixin.qq.com/s/uF29K8gzv7qHYk-K2pQkpQ)| |04|[Boot2 整合 Swagger2 ,構建介面管理介面](https://mp.weixin.qq.com/s/ztmmC3bKlSfUl5Ec3qUPOQ)| |05|[Boot2 整合 QuartJob ,實現定時器實時管理](https://mp.weixin.qq.com/s/CKf8JZEKx8HMidkYKRKo_w)| |06|[Boot2 整合 Redis叢集 ,實現訊息佇列場景](https://mp.weixin.qq.com/s/nU6hZY17cO7BF68YyI78Yw)| |07|[Boot2 整合 Dubbo框架 ,實現RPC服務遠端呼叫](https://mp.weixin.qq.com/s/uKvgLpASyJYC9mafO05Uvw)| |08|[Boot2 整合 ElasticSearch框架,實現高效能搜尋引擎](https://mp.weixin.qq.com/s/ZUj4qy7qHgmfYPTdimO-Hw)| |09|[Boot2 整合 JWT 框架,解決Token跨域驗證問題](https://mp.weixin.qq.com/s/CYvsho_kCwUndTuDkDOvOg)| |10|[Boot2 整合 FastDFS 中介軟體,實現檔案分佈管理](https://mp.weixin.qq.com/s/c9DsOUF545oqD1Hft5DcQw)| |11|[Boot2 整合 Shiro 框架,實現使用者許可權管理](https://mp.weixin.qq.com/s/3tyPcvfUzv6BI8KWkLZ53w)| |12|[Boot2 整合 Security 框架,實現使用者許可權管理](https://mp.weixin.qq.com/s/7GYddhPSf3C7ZSEqF7OZKw)| |13|[Boot2 整合 ClickHouse資料庫,實現資料高效能查詢分析](https://mp.weixin.qq.com/s/KoNVUAe1ttC9AX7JAMqfOA)| |14|[Boot2 整合 Drools規則引擎,實現高效的業務規則](https://mp.weixin.qq.com/s/fBDv5N-5RxcuWMi6He3p4Q)| |15|[Boot2 整合 多資料來源,配置MybatisPlus增強外掛](https://mp.weixin.qq.com/s/B738xzn848_YORt8qT-X5Q)| |16|[Boot2 整合 Zookeeper元件,管理架構中服務協調](https://mp.weixin.qq.com/s/zjw-A7u-chGZhNgwuUsEPw)| |17|[Boot2 整合Nacos元件,環境搭建和入門案例詳解](https://mp.weixin.qq.com/s/jfkEtqFus8v_JXNrRSHYOA)| |18|[檔案系統(01):基於Boot2框架,管理Excel和PDF](https://mp.weixin.qq.com/s/YQueOKCmAkVASHKtwz6pgw)| |18|[檔案系統(02):基於Boot2框架,管理Xml和CSV](https://mp.weixin.qq.com/s/tIHykTG0ey1dwnTwzYwuig)| |19|[Boot2 整合 Kafka元件,應用案例和流程詳解](https://mp.weixin.qq.com/s/XP2LhioxBGk7z_vW1XN2nQ)| |20|[Boot2 整合 ElasticJob框架,定製化管理流程](https://mp.weixin.qq.com/s/eFKq3zKksbwzHZ3d81HaZw)| |21|[Boot2 整合JTA元件,多資料來源事務管理](https://mp.weixin.qq.com/s/6zR4JXDnoinzLDUaENWVSA)| |22|[Boot2 整合FreeMarker模板,完成頁面靜態化處理](https://mp.weixin.qq.com/s/HwFT_E7v0ms_jQWP