• MinioUtil


    package com.joysuccess.dcim.plugin.utils;
    
    import io.minio.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    
    public class MinioUtils {
    
        private final Logger log = LoggerFactory.getLogger(MinioUtils.class);
    
        /**
         * minio参数
         */
        private static final String ENDPOINT = "http://172.16.1.165:19000";
        private static final String ACCESS_KEY = "minioadmin";
        private static final String SECRET_KEY = "yunzhihui123";/*
        private static final String ENDPOINT = "http://10.0.12.185:9000";
        private static final String ACCESS_KEY = "minioadmin";
        private static final String SECRET_KEY = "minioadmin";*/
    
    
        /**
         * 文件url前半段
         *
         * @param bucket 桶
         * @return 前半段
         */
        public static String getObjectPrefixUrl(String bucket) {
            return String.format("%s/", bucket);
        }
    
    
    
        /**
         * 上传本地文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         * @param filePath  文件路径
         * @return 文件url
         */
        public static String uploadFile(String bucket, String objectKey, String filePath) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.uploadObject(UploadObjectArgs.builder().bucket(bucket).object(objectKey).filename(filePath).contentType("image/png").build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 流式上传文件
         *
         * @param bucket      桶
         * @param objectKey   文件key
         * @param inputStream 文件输入流
         * @return 文件url
         */
        public static String uploadInputStream(String bucket, String objectKey, InputStream inputStream) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.putObject(PutObjectArgs.builder().bucket(bucket).object(objectKey).stream(inputStream, inputStream.available(), -1).contentType("image/png").build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 下载文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         * @return 文件流
         */
        public static InputStream download(String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            return client.getObject(GetObjectArgs.builder().bucket(bucket).object(objectKey).build());
        }
    
        /**
         * 文件复制
         *
         * @param sourceBucket    源桶
         * @param sourceObjectKey 源文件key
         * @param bucket          桶
         * @param objectKey       文件key
         * @return 新文件url
         */
        public static String copyFile(String sourceBucket, String sourceObjectKey, String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            CopySource source = CopySource.builder().bucket(sourceBucket).object(sourceObjectKey).build();
            client.copyObject(CopyObjectArgs.builder().bucket(bucket).object(objectKey).source(source).build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 删除文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         */
        public static void deleteFile(String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectKey).build());
        }
    
        public static void main(String[] args) {
            String bucket = "dcim";
            String objectKey = "demo/123.png";
            //String objectKey = "group1/M00/00/19/wKgBDllU7pyAbPD_AAVuXfDy4-A049.png";
            try {
                // 创建桶
                //makeBucket(bucket);
                // 设置桶读写权限
                //setBucketPolicy(bucket, "read-write");
                // 上传本地文件
                String url1 = uploadFile(bucket, objectKey, "/tmp/123.png");
                // 输出  http://127.0.0.1:9000/demo/123.png
                System.out.println(url1);
                // 上传文件流
                String url2 = uploadInputStream(bucket, objectKey, new FileInputStream(new File("/tmp/123.png")));
                // 输出  http://127.0.0.1:9000/demo/123.png
                System.out.println(url2);
                // 下载文件
                InputStream inputStream = download(bucket, objectKey);
                // 文件复制
                String url3 = copyFile(bucket, objectKey, "dcim", "test/abc.png");
                // 输出  http://127.0.0.1:9000/test/abc.png
                System.out.println(url3);
                // 删除文件
                deleteFile("dcim", "test/abc.png");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
            <!-- minio -->
            <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>7.1.0</version>
            </dependency>

    minio的安装使用

    https://www.jianshu.com/p/f8c7998d2a27

    MinIO的JavaSDK调用(最新版)

    https://studygolang.com/articles/30605

    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>7.1.2</version>
    </dependency>
    package com.minio.service;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    import io.minio.*;
    import io.minio.http.Method;
    
    public class Minio {
    
    
        /**
         * minio参数
         */
        private static final String ENDPOINT = "http://127.0.0.1:9000";
        private static final String ACCESS_KEY = "******";
        private static final String SECRET_KEY = "******";
    
    
        /**
         * 桶占位符
         */
        private static final String BUCKET_PARAM = "${bucket}";
        /**
         * bucket权限-只读
         */
        private static final String READ_ONLY = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetObject\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "/*\"]}]}";
        /**
         * bucket权限-只读
         */
        private static final String WRITE_ONLY = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "/*\"]}]}";
        /**
         * bucket权限-读写
         */
        private static final String READ_WRITE = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + BUCKET_PARAM + "/*\"]}]}";
    
        /**
         * 文件url前半段
         *
         * @param bucket 桶
         * @return 前半段
         */
        public static String getObjectPrefixUrl(String bucket) {
            return String.format("%s/%s/", ENDPOINT, bucket);
        }
    
        /**
         * 创建桶
         *
         * @param bucket 桶
         */
        public static void makeBucket(String bucket) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            // 判断桶是否存在
            boolean isExist = client.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
            if (!isExist) {
                // 新建桶
                client.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
            }
        }
    
        /**
         * 更新桶权限策略
         *
         * @param bucket 桶
         * @param policy 权限
         */
        public static void setBucketPolicy(String bucket, String policy) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            switch (policy) {
                case "read-only":
                    client.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).config(READ_ONLY.replace(BUCKET_PARAM, bucket)).build());
                    break;
                case "write-only":
                    client.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).config(WRITE_ONLY.replace(BUCKET_PARAM, bucket)).build());
                    break;
                case "read-write":
                    client.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucket).config(READ_WRITE.replace(BUCKET_PARAM, bucket)).build());
                    break;
                case "none":
                default:
                    break;
            }
        }
    
        /**
         * 上传本地文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         * @param filePath  文件路径
         * @return 文件url
         */
        public static String uploadFile(String bucket, String objectKey, String filePath) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.uploadObject(UploadObjectArgs.builder().bucket(bucket).object(objectKey).filename(filePath).contentType("image/png").build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 流式上传文件
         *
         * @param bucket      桶
         * @param objectKey   文件key
         * @param inputStream 文件输入流
         * @return 文件url
         */
        public static String uploadInputStream(String bucket, String objectKey, InputStream inputStream) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.putObject(PutObjectArgs.builder().bucket(bucket).object(objectKey).stream(inputStream, inputStream.available(), -1).contentType("image/png").build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 下载文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         * @return 文件流
         */
        public static InputStream download(String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            return client.getObject(GetObjectArgs.builder().bucket(bucket).object(objectKey).build());
        }
    
        /**
         * 文件复制
         *
         * @param sourceBucket    源桶
         * @param sourceObjectKey 源文件key
         * @param bucket          桶
         * @param objectKey       文件key
         * @return 新文件url
         */
        public static String copyFile(String sourceBucket, String sourceObjectKey, String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            CopySource source = CopySource.builder().bucket(sourceBucket).object(sourceObjectKey).build();
            client.copyObject(CopyObjectArgs.builder().bucket(bucket).object(objectKey).source(source).build());
            return getObjectPrefixUrl(bucket) + objectKey;
        }
    
        /**
         * 删除文件
         *
         * @param bucket    桶
         * @param objectKey 文件key
         */
        public static void deleteFile(String bucket, String objectKey) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            client.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectKey).build());
        }
    
        /**
         * 获取文件签名url
         *
         * @param bucket    桶
         * @param objectKey 文件key
         * @param expires   签名有效时间  单位秒
         * @return 文件签名地址
         */
        public static String getSignedUrl(String bucket, String objectKey, int expires) throws Exception {
            MinioClient client = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            return client.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucket).object(objectKey).expiry(expires).build());
        }
    
    
        public static void main(String[] args) {
            String bucket = "public";
            String objectKey = "demo/123.png";
            try {
                // 创建桶
                makeBucket(bucket);
                // 设置桶读写权限
                setBucketPolicy(bucket, "read-write");
                // 上传本地文件
                String url1 = uploadFile(bucket, objectKey, "D://123.png");
                // 输出  http://127.0.0.1:9000/demo/123.png
                System.out.println(url1);
                // 上传文件流
                String url2 = uploadInputStream(bucket, objectKey, new FileInputStream(new File("D://123.png")));
                // 输出  http://127.0.0.1:9000/demo/123.png
                System.out.println(url2);
                // 下载文件
                InputStream inputStream = download(bucket, objectKey);
                // 文件复制
                String url3 = copyFile(bucket, objectKey, "test", "test/abc.png");
                // 输出  http://127.0.0.1:9000/test/abc.png
                System.out.println(url3);
                // 删除文件
                deleteFile("test", "test/abc.png");
                // 获取文件签名url
                String sign = getSignedUrl(bucket, objectKey, 600);
                // 该路径可访问文件五分钟
                System.out.println(sign);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    如何在一个项目中同时包含mvc建站、webapi接口
    解决api、WebService跨域问题
    mvc接口、webapi、webservice 对比
    云服务器 远程mysql 无法连接
    c#快速写本地日志
    使用筛选器特性标记方法解决webapi 跨域问题
    流量控制(滑动窗口协议)
    解释Windows7“上帝模式”的原理
    Linux网络协议栈(二)——套接字缓存(socket buffer)
    理解MySQL——架构与概念
  • 原文地址:https://www.cnblogs.com/tonggc1668/p/15847845.html
Copyright © 2020-2023  润新知