本文作者:DurkBlue

记录使用MinIO作为文件分布式存储服务的使用方法推荐

DurkBlue 昨天 37
记录使用MinIO作为文件分布式存储服务的使用方法摘要:         MinIO 是一种高性能、S3 兼容的对象存储。它是为 大规模 AI/ML、数据湖和...

        MinIO 是一种高性能、S3 兼容的对象存储。它是为 大规模 AI/ML、数据湖和数据库工作负载。它是软件定义的 并在任何云或本地基础设施上运行。 MinIO 具有双重许可 根据开源 GNU AGPL v3 和商业企业许可证

        一、下载MinIO依赖

        

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

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

    

    二、MinIO工具类

 

package com.sl.util;


import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import io.minio.*;

import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.SneakyThrows;
import org.apache.http.client.utils.URIBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

/**
* minio
操作类
*/
@Component
public class MinioUtils {

   @Value("${minio.buccketName}")
   private String buccketName;
   @Autowired
   private MinioClient client;


   /**
    *
创建桶
   
*
    *
@param bucketName 桶名称
   
*/
   
@SneakyThrows
   public void createBucket(String bucketName) {
       boolean found =
               client.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
       if (!found) {
           client.makeBucket(
                   MakeBucketArgs.builder()
                           .bucket(bucketName)
                           .region("cn-beijing")
                           .build());
       }
   }

   /**
    *
删除桶
   
*
    *
@param bucketName 桶名称
   
*/
   
@SneakyThrows
   public void removeBucket(String bucketName) {
       client.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
   }

   /**
    *
获取文件信息
   
*
    *
@param bucketName 桶名称
   
* @param objectName 文件名称
   
* @return
   
*/
   
@SneakyThrows
   public ObjectStat getObjectInfo(String bucketName, String objectName) {
       return client.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());
   }

   /**
    *
上传文件
   
*
    *
@param bucketName 桶名称
   
* @param objectName 文件名
   
* @param stream    
   
* @param fileSize   文件大小
   
* @param type       文件类型
   
* @throws Exception
    */
   
public void putObject(String bucketName, String objectName, InputStream stream, Long fileSize, String type) throws Exception {
       client.putObject(
               PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
                       stream, fileSize, -1)
                       .contentType(type)
                       .build());
   }

   /**
    *
判断文件夹是否存在
   
*
    *
@param bucketName 桶名称
   
* @param prefix     文件夹名字
   
* @return
   
*/
   
@SneakyThrows
   public Boolean folderExists(String bucketName, String prefix) {
       Iterable<Result<Item>> results = client.listObjects(ListObjectsArgs.builder().bucket(bucketName)
               .prefix(prefix).recursive(false).build());
       for (Result<Item> result:results){
           Item item = result.get();
           if (item.isDir()){
               return true;
           }
       }
       return false;
   }

   /**
    *
创建文件夹
   
* @param bucketName 桶名称
   
* @param path 路径
   
*/
   
@SneakyThrows
   public void createFolder(String bucketName,String path) {
       client.putObject(PutObjectArgs.builder().bucket(bucketName).object(path)
               .stream(new ByteArrayInputStream(new byte[]{}),0,-1).build());
   }

   /**
    *
获取文件在minio在服务器上的外链
   
* @param bucketName 桶名称
   
* @param objectName 文件名
   
* @return
   
*/
   
@SneakyThrows
   public String getObjectUrl(String bucketName,String objectName){
       return client.getPresignedObjectUrl(
                    GetPresignedObjectUrlArgs.builder()
                          .method(Method.GET)
                         .bucket(bucketName)
                         .object(objectName)
                         .build());
   }

   /**
    *
获取minio永不失效的外链
   
* @param fileName 文件名称
   
* @param bucketName 桶名称
   
* @return 外链接
   
*/
   
public String getPreviewUrl(String fileName, String bucketName) {
       if (StringUtils.isNotBlank(fileName)) {
           String bucket = bucketName == null ? this.buccketName : bucketName;
           try {
               client.statObject(StatObjectArgs.builder().bucket(bucket).object(fileName).build());
               String url = client.getPresignedObjectUrl(
                       GetPresignedObjectUrlArgs.builder()
                               .method(Method.GET)
                               .bucket(bucket)
                               .object(fileName)
                               .build());
               URIBuilder uriBuilder = new URIBuilder(url);
               uriBuilder.removeQuery();
               return uriBuilder.build().toString();
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
       return null;
   }

   /**
    *
获取minio永久外链
   
* @param fileName 文件名称
   
* @param bucketName 桶名称
   
* @return 外链接
   
*/
   
public String getPermanentUrl(String fileName, String bucketName) {
       if (StringUtils.isNotBlank(fileName)) {
           String bucket = bucketName == null ? this.buccketName : bucketName;
           try {
               // 检查对象是否存在
               
client.statObject(StatObjectArgs.builder().bucket(bucket).object(fileName).build());

               // 返回永久链接
               
return client.getObjectUrl(bucket, fileName);
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
       return null;
   }

   /**
    *
根据key删除服务器上的文件
   
*/
   
public boolean deleteFileByUrl(String bucketName,String fileName,String folder) {
       try {
           client.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(folder + fileName).build());
           System.out.println(("删除" + bucketName + "下的文件" + folder + fileName + "成功"));
           return true;
       } catch (Exception e) {
           System.out.println(("删除文件失败:{}"+ e.getMessage()));
           e.printStackTrace();
           return false;
       }
   }

}



此篇文章由DurkBlue博主亲自发布,转载请注明来处哟
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 昨天
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享