zoukankan      html  css  js  c++  java
  • Minio 操作工具类

    maven

    <properties>
        <minio.version>6.0.13</minio.version>
    </properties>
    <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>${minio.version}</version>
            </dependency>

    使用springboot初始化

    package com.im.oss;
    
    import io.minio.MinioClient;
    import io.minio.ObjectStat;
    import io.minio.Result;
    import io.minio.messages.Bucket;
    import io.minio.messages.Item;
    import lombok.RequiredArgsConstructor;
    import lombok.SneakyThrows;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.stereotype.Component;
    import org.springframework.util.Assert;
    
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Optional;
    
    @Component
    @RequiredArgsConstructor
    public class MinioTemplate implements InitializingBean {
        private final String endpoint;
        private final String accessKey;
        private final String secretKey;
        private MinioClient client;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            Assert.hasText(endpoint, "Minio url 为空");
            Assert.hasText(accessKey, "Minio accessKey为空");
            Assert.hasText(secretKey, "Minio secretKey为空");
            this.client = new MinioClient(endpoint, accessKey, secretKey);
        }
    
        /**
         * 创建bucket
         *
         * @param bucketName bucket名称
         */
        @SneakyThrows
        public void createBucket(String bucketName) {
            if (!client.bucketExists(bucketName)) {
                client.makeBucket(bucketName);
            }
        }
    
        /**
         * 获取全部bucket
         * <p>
         * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets
         */
        @SneakyThrows
        public List<Bucket> getAllBuckets() {
            return client.listBuckets();
        }
    
        /**
         * 根据bucketName获取信息
         *
         * @param bucketName bucket名称
         */
        @SneakyThrows
        public Optional<Bucket> getBucket(String bucketName) {
            return client.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();
        }
    
        /**
         * 根据bucketName删除信息
         *
         * @param bucketName bucket名称
         */
        @SneakyThrows
        public void removeBucket(String bucketName) {
            client.removeBucket(bucketName);
        }
    
        /**
         * 根据文件前置查询文件
         *
         * @param bucketName bucket名称
         * @param prefix     前缀
         * @param recursive  是否递归查询
         * @return MinioItem 列表
         */
        @SneakyThrows
        public List getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) {
            List<Item> list = new ArrayList<>();
            Iterable<Result<Item>> objectsIterator = client.listObjects(bucketName, prefix, recursive);
            if (objectsIterator != null) {
                Iterator<Result<Item>> iterator = objectsIterator.iterator();
                if (iterator != null) {
                    while (iterator.hasNext()) {
                        Result<Item> result = iterator.next();
                        Item item = result.get();
                        list.add(item);
                    }
                }
            }
    
            return list;
        }
    
        /**
         * 获取文件外链
         *
         * @param bucketName bucket名称
         * @param objectName 文件名称
         * @param expires    过期时间 <=7
         * @return url
         */
        @SneakyThrows
        public String getObjectURL(String bucketName, String objectName, Integer expires) {
            return client.presignedGetObject(bucketName, objectName, expires);
        }
    
        /**
         * 获取文件
         *
         * @param bucketName bucket名称
         * @param objectName 文件名称
         * @return 二进制流
         */
        @SneakyThrows
        public InputStream getObject(String bucketName, String objectName) {
            return client.getObject(bucketName, objectName);
        }
    
        /**
         * 上传文件
         *
         * @param bucketName bucket名称
         * @param objectName 文件名称
         * @param stream     文件流
         * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject
         */
        public void putObject(String bucketName, String objectName, InputStream stream) throws Exception {
            client.putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream");
        }
    
        /**
         * 上传文件
         *
         * @param bucketName  bucket名称
         * @param objectName  文件名称
         * @param stream      文件流
         * @param size        大小
         * @param contextType 类型
         * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject
         */
        public void putObject(String bucketName, String objectName, InputStream stream, long size, String contextType) throws Exception {
            client.putObject(bucketName, objectName, stream, size, contextType);
        }
    
        /**
         * 获取文件信息, 如果抛出异常则说明文件不存在
         *
         * @param bucketName bucket名称
         * @param objectName 文件名称
         * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject
         */
        public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception {
            return client.statObject(bucketName, objectName);
        }
    
        /**
         * 删除文件
         *
         * @param bucketName bucket名称
         * @param objectName 文件名称
         * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject
         */
        public void removeObject(String bucketName, String objectName) throws Exception {
            client.removeObject(bucketName, objectName);
        }
    }
  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/xiaojf/p/12801139.html
Copyright © 2011-2022 走看看