天天看點

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址

一、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、基礎依賴

<dependency>           
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;                

</dependency> <dependency>

&lt;groupId&gt;io.minio&lt;/groupId&gt;
&lt;artifactId&gt;minio&lt;/artifactId&gt;
&lt;version&gt;3.0.12&lt;/version&gt;                

</dependency>

2、基礎配置

配置要素:位址和端口,登入名,密碼,HTML存儲桶,圖檔存儲桶。

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址
minio:
  endpoint:         http://192.168.72.133:9000               
  accessKey: minioadmin
  secretKey: minioadmin
  bucketNameHtml: html
  bucketNameImage: image           

檔案上傳之後,可以基于檔案位址直接通路,但是需要在MinIO中配置檔案的讀寫權限:

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址

3、配置參數類

@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 ...");
    }
}

/**
 * 上傳 &lt;html&gt; 頁面
 */
public String uploadHtml (String fileName, String filePath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;
}

/**
 * 上傳 &lt;img&gt; 圖檔
 */
public String uploadImg (String imgName, String imgPath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;
}                

}

5、服務實作

提供兩個基礎方法: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 ;

// 上傳 &lt;html&gt; ,傳回伺服器位址
@Override
public String uploadHtml(String fileName, String filePath) throws Exception {
    return minIOConfig.uploadHtml(fileName,filePath);
}

// 上傳 &lt;img&gt; ,傳回伺服器位址
@Override
public String uploadImg(String imgName, String imgPath) throws Exception {
    return minIOConfig.uploadImg(imgName,imgPath);
}                

}

上傳之後,基于浏覽器通路接口傳回的url,檢視效果:

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址

四、源代碼位址

GitHub·位址
        https://github.com/cicadasmile/middle-ware-parent               
GitEE·位址
        https://gitee.com/cicadasmile/middle-ware-parent               

https://dl.min.io/server/minio/release/linux-amd64/minio               

/opt/minioconfig/run

mkdir -p /data/minio/data           

/opt/minioconfig/run/minio server /data/minio/data/           
Endpoint:          http://localhost:9000            http://127.0.0.1:9000                   
AccessKey: minioadmin 
SecretKey: minioadmin           

<dependency>           
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;                

</dependency> <dependency>

&lt;groupId&gt;io.minio&lt;/groupId&gt;
&lt;artifactId&gt;minio&lt;/artifactId&gt;
&lt;version&gt;3.0.12&lt;/version&gt;                

</dependency>

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址
minio:
  endpoint:         http://192.168.72.133:9000               
  accessKey: minioadmin
  secretKey: minioadmin
  bucketNameHtml: html
  bucketNameImage: image           
SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址

@Component
@ConfigurationProperties(prefix = "minio")
public class ParamConfig {           
private String endpoint ;
private String accessKey ;
private String secretKey ;
private String bucketNameHtml ;
private String bucketNameImage ;
// 省略 get 和 set方法                

}

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 ...");
    }
}

/**
 * 上傳 &lt;html&gt; 頁面
 */
public String uploadHtml (String fileName, String filePath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameHtml(),fileName,filePath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameHtml()+"/"+fileName ;
}

/**
 * 上傳 &lt;img&gt; 圖檔
 */
public String uploadImg (String imgName, String imgPath) throws Exception {
    minioClient.putObject(paramConfig.getBucketNameImage(),imgName,imgPath);
    return paramConfig.getEndpoint()+"/"+paramConfig.getBucketNameImage()+"/"+imgName ;
}                

}

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 ;

// 上傳 &lt;html&gt; ,傳回伺服器位址
@Override
public String uploadHtml(String fileName, String filePath) throws Exception {
    return minIOConfig.uploadHtml(fileName,filePath);
}

// 上傳 &lt;img&gt; ,傳回伺服器位址
@Override
public String uploadImg(String imgName, String imgPath) throws Exception {
    return minIOConfig.uploadImg(imgName,imgPath);
}                

}

SpringBoot2 整合MinIO中間件,實作檔案便捷管理一、MinIO簡介二、MinIO環境搭建三、整合SpringBoot環境四、源代碼位址

GitHub·位址
        https://github.com/cicadasmile/middle-ware-parent               
GitEE·位址
        https://gitee.com/cicadasmile/middle-ware-parent               

繼續閱讀