SpringBoot整合MinIO


今天因為公司的需求接觸到這個東西,我們先來看下MinIO的官網簡介

MinIO 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務接口,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。

 

字面意思 MinIO是一個文件存儲服務 支持分布式,以及可搭建集群,單體項目所以不考慮集群,下面我們來安裝它,我所在的環境為Linux

1.https://dl.min.io/server/minio/release/linux-amd64/minio
2.chmod +x minio
3./minio server /data

 

 

 

這是啟動好的樣子,然后我們在瀏覽器里訪問

 

讓你填寫AK和SK,把剛剛打印在控制台上的輸入即可,如果想要修改的話通過以下方式可修改

export MINIO_ACCESS_KEY=AK
export MINIO_ACCESS_KEY=SK

 

 

 登錄成功后在頁面右下角點擊創建桶,也就是我們的文件夾

 

創建好后我們就直接可以來上傳了,但我們的目前是在SpringBoot程序當中進行上傳下載

首先我們來添加依賴

 <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>7.1.0</version>
</dependency>

 

 

 

 由於項目的原因我並沒有把信息配置在YAML里面,可自行根據自己場景配置

import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.kzwl.comm.advice.Consts;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.List;

/**
 * Minio工具類
 */
@Slf4j
public  class MinIoUtil {

    public static MinioClient minioClient;

    /**
     * 初始化minio配置
     *
     * @param :
     * @return: void
     * @date : 2020/8/16 20:56
     */
  @PostConstruct public static void init() { try { log.info("Minio Initialize........................"); minioClient = MinioClient.builder().endpoint(Consts.Minio.Url).credentials(Consts.Minio.AccessKey,Consts.Minio.SecretKey).build(); createBucket(Consts.Minio.BucketName); log.info("Minio Initialize........................successful"); } catch (Exception e) { e.printStackTrace(); log.error("初始化minio配置異常: 【{}】", e.fillInStackTrace()); } } /** * 判斷 bucket是否存在 * * @param bucketName: * 桶名 * @return: boolean */ @SneakyThrows(Exception.class) public static boolean bucketExists(String bucketName) { return minioClient.bucketExists(bucketName); } /** * 創建 bucket * * @param bucketName: * 桶名 * @return: void */ @SneakyThrows(Exception.class) public static void createBucket(String bucketName) { boolean isExist = minioClient.bucketExists(bucketName); if (!isExist) { minioClient.makeBucket(bucketName); } } /** * 獲取全部bucket * * @param : * @return: java.util.List<io.minio.messages.Bucket> */ @SneakyThrows(Exception.class) public static List<Bucket> getAllBuckets() { return minioClient.listBuckets(); } /** * 文件上傳 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param filePath: * 文件路徑 * @return: void */ @SneakyThrows(Exception.class) public static void upload(String bucketName, String fileName, String filePath) { minioClient.putObject(bucketName, fileName, filePath, null); } /** * 文件上傳 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param stream: * 文件流 * @return: java.lang.String : 文件url地址 */ @SneakyThrows(Exception.class) public static String upload(String bucketName, String fileName, InputStream stream) { minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1)); return getFileUrl(bucketName, fileName); } /** * 文件上傳 * * @param bucketName: * 桶名 * @param file: * 文件 * @return: java.lang.String : 文件url地址 */ @SneakyThrows(Exception.class) public static String upload(String bucketName, MultipartFile file) { final InputStream is = file.getInputStream(); final String fileName = file.getOriginalFilename(); minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1)); is.close(); return getFileUrl(bucketName, fileName); } /** * 刪除文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: void */ @SneakyThrows(Exception.class) public static void deleteFile(String bucketName, String fileName) { minioClient.removeObject(bucketName, fileName); } /** * 下載文件 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @param response: * @return: void */ // @SneakyThrows(Exception.class) // public static void download(String bucketName, String fileName, HttpServletResponse response) { // // 獲取對象的元數據 // final ObjectStat stat = minioClient.statObject(bucketName, fileName); // response.setContentType(stat.contentType()); // response.setCharacterEncoding("UTF-8"); // response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // InputStream is = minioClient.getObject(bucketName, fileName); // IOUtils.copy(is, response.getOutputStream()); // is.close(); // } /** * 獲取minio文件的下載地址 * * @param bucketName: * 桶名 * @param fileName: * 文件名 * @return: java.lang.String * @date : 2020/8/16 22:07 */ @SneakyThrows(Exception.class) public static String getFileUrl(String bucketName, String fileName) { return minioClient.presignedGetObject(bucketName, fileName); } }

MinIO相對操作還是很簡單,當然這是針對單機操作,如果並發量大的話,可考慮配置集群!

如有侵權請聯系作者刪除!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM