Browse Source

add FileStorageTemplate getSpace

xiewj 1 year ago
parent
commit
015366ce63

+ 1 - 1
4dkankan-utils-filestorage/pom.xml

@@ -15,7 +15,7 @@
         <fastjson.version>2.0.6</fastjson.version>
         <cos.version>5.6.166</cos.version>
         <aws.version>1.12.481</aws.version>
-        <minio.version>8.2.2</minio.version>
+        <minio.version>8.5.6</minio.version>
         <aliyun-sdk-oss.version>3.8.0</aliyun-sdk-oss.version>
 
     </properties>

+ 4 - 0
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/FileStorageTemplate.java

@@ -93,4 +93,8 @@ public interface FileStorageTemplate {
     String calculateUrl(String pathKey);
     String calculateUrl(String bucket, String pathKey);
     String getHostByBucket(String bucket);
+
+    Long getSpace(String bucket, String key);
+    Long getSpace( String key);
+
 }

+ 29 - 1
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/aliyun/AliyunOssTemplate.java

@@ -342,5 +342,33 @@ public class AliyunOssTemplate implements FileStorageTemplate {
         return calculateUrl(bucket, pathKey);
     }
 
-
+    @Override
+    public Long getSpace(String bucket, String key) {
+
+        Long total = 0L;
+        boolean flag = true;
+        String nextMaker = null;
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucket);
+        //指定下一级文件
+        listObjectsRequest.setPrefix(key);
+        //设置分页的页容量
+        listObjectsRequest.setMaxKeys(200);
+        do {
+            //获取下一页的起始点,它的下一项
+            listObjectsRequest.setMarker(nextMaker);
+            ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
+            Long space = objectListing.getObjectSummaries().parallelStream()
+                    .mapToLong(OSSObjectSummary::getSize).sum();
+            total += space;
+            nextMaker = objectListing.getNextMarker();
+            //全部执行完后,为false
+            flag = objectListing.isTruncated();
+        } while (flag);
+        return total;
+    }
+
+    @Override
+    public Long getSpace(String key) {
+        return  getSpace(ossProperties.getBucket(), key);
+    }
 }

+ 27 - 0
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/aws/AwsTemplate.java

@@ -394,5 +394,32 @@ public class AwsTemplate implements FileStorageTemplate {
         return calculateUrl(bucket, pathKey);
     }
 
+    @Override
+    public Long getSpace(String bucket, String key) {
+        List<String> keyList = new ArrayList<>();
+        Long total = 0L;
+        boolean flag = true;
+        String nextMaker = null;
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
+        listObjectsRequest.setBucketName(bucket);
+        listObjectsRequest.setPrefix(key);
+        listObjectsRequest.setMaxKeys(200);
+
+        do {
+            listObjectsRequest.setMarker(nextMaker);
+            ObjectListing objectListing = amazonS3Client.listObjects(listObjectsRequest);
+            List<S3ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
+            Long space = objectSummaries.stream().mapToLong(S3ObjectSummary::getSize).sum();
+            total += space;
+            nextMaker = objectListing.getNextMarker();
+            flag = objectListing.isTruncated();
+        } while (flag);
+
+        return total;
+    }
 
+    @Override
+    public Long getSpace(String key) {
+        return  getSpace(awsProperties.getBucket(), key);
+    }
 }

+ 29 - 1
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/cos/CosTemplate.java

@@ -352,5 +352,33 @@ public class CosTemplate implements FileStorageTemplate {
         return calculateUrl(bucket, pathKey);
     }
 
-
+    @Override
+    public Long getSpace(String bucket, String key) {
+        Long total = 0L;
+        boolean flag = true;
+        String nextMaker = null;
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
+        listObjectsRequest.setBucketName(bucket);
+        //指定下一级文件
+        listObjectsRequest.setPrefix(key);
+        //设置分页的页容量
+        listObjectsRequest.setMaxKeys(1000);
+        do {
+            //获取下一页的起始点,它的下一项
+            listObjectsRequest.setMarker(nextMaker);
+            ObjectListing objectListing = cosClient.listObjects(listObjectsRequest);
+            Long space = objectListing.getObjectSummaries().parallelStream()
+                    .mapToLong(COSObjectSummary::getSize).sum();
+            total += space;
+            nextMaker = objectListing.getNextMarker();
+            //全部执行完后,为false
+            flag = objectListing.isTruncated();
+        } while (flag);
+        return total;
+    }
+
+    @Override
+    public Long getSpace(String key) {
+        return  getSpace(cosProperties.getBucket(), key);
+    }
 }

+ 65 - 10
4dkankan-utils-filestorage/src/main/java/com/fdkankan/filestorage/minio/MinioTemplate.java

@@ -22,6 +22,7 @@ import org.springframework.util.Base64Utils;
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
@@ -155,13 +156,25 @@ public class MinioTemplate implements FileStorageTemplate {
         InnerUtils.checkArgument(bucket != null && bucket.length() > 0, "bucket can't be empty");
         InnerUtils.checkArgument(pathKey != null && pathKey.length() > 0, "pathKey can't be empty");
         InnerUtils.checkArgument(file != null && file.length() > 0, "file can't be empty");
-        GetObjectArgs objectArgs = GetObjectArgs.builder().object(pathKey)
-                .bucket(bucket).build();
+
+        InputStream in=null;
+
         log.info("下载开始:下载bucket={},下载pathKey={},下载filePath={}", bucket, pathKey, file);
         try {
-            return minioClient.getObject(objectArgs);
+            GetObjectArgs objectArgs = GetObjectArgs.builder().object(pathKey)
+                    .bucket(bucket).build();
+            in = minioClient.getObject(objectArgs);
+            return null;
         } catch (Exception e) {
             e.printStackTrace();
+        }finally {
+            if(in!=null){
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
         }
         return null;
     }
@@ -178,12 +191,20 @@ public class MinioTemplate implements FileStorageTemplate {
         InnerUtils.checkArgument(handler != null, "handler can't be null");
         GetObjectArgs objectArgs = GetObjectArgs.builder().object(pathKey)
                 .bucket(bucket).build();
-        GetObjectResponse ossObject = null;
+        InputStream in=null;
         try {
-            ossObject = minioClient.getObject(objectArgs);
-            return ossObject;
+            in = minioClient.getObject(objectArgs);
+            return null;
         } catch (Exception e) {
             e.printStackTrace();
+        }finally {
+            if(in!=null){
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
         }
         return null;
     }
@@ -270,9 +291,9 @@ public class MinioTemplate implements FileStorageTemplate {
         try {
             ListObjectsArgs objectArgs = ListObjectsArgs.builder()
                     .bucket(bucket).recursive(true).prefix(keyName + "/").build();
-            Iterable<Result<Item>> results = minioClient.listObjects(objectArgs);
-            for (Result<Item> result : results) {
-                Item item = result.get();
+            Iterator<Result<Item>> iterator = minioClient.listObjects(objectArgs).iterator();
+            while (iterator.hasNext()){
+                Item item = iterator.next().get();
                 list.add(item.objectName());
             }
             log.info("获取文件夹集合={}", JSON.toJSONString(list));
@@ -289,8 +310,10 @@ public class MinioTemplate implements FileStorageTemplate {
                 .bucket(bucket)
                 .object(keyName)
                 .build();
+        InputStream in=null;
+
         try {
-            GetObjectResponse response = minioClient.getObject(getArgs);
+            in = minioClient.getObject(getArgs);
             return true;
         } catch (ErrorResponseException e) {
             if (e.errorResponse().code().equals("NoSuchKey")) {
@@ -300,6 +323,14 @@ public class MinioTemplate implements FileStorageTemplate {
         } catch (Exception e) {
             log.error("连接异常", e.getMessage());
             return false;
+        }finally {
+            if(in!=null){
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    log.error(e.getMessage(), e);
+                }
+            }
         }
         return false;
     }
@@ -365,5 +396,29 @@ public class MinioTemplate implements FileStorageTemplate {
         return calculateUrl(bucket, pathKey);
     }
 
+    @Override
+    public Long getSpace(String bucket, String key) {
+        try {
+            List<String> list = new ArrayList<>();
+            Long total = 0L;
+            ListObjectsArgs objectArgs = ListObjectsArgs.builder()
+                    .bucket(bucket).recursive(true).prefix(key + "/").build();
+            Iterator<Result<Item>> iterator = minioClient.listObjects(objectArgs).iterator();
+            while (iterator.hasNext()){
+                Item item = iterator.next().get();
+                Long space =item.size();
+                total += space;
+            }
+            log.info("获取文件夹大小={}", total);
+            return total;
+        } catch (Exception e) {
+            log.error("获取文件夹大小失败={}", e.getMessage());
+        }
+        return 0L;
+    }
 
+    @Override
+    public Long getSpace(String key) {
+        return  getSpace(minioProperties.getBucket(), key);
+    }
 }

+ 14 - 1
4dkankan-utils-rabbitmq/src/main/java/com/fdkankan/rabbitmq/util/RabbitMqProducer.java

@@ -47,7 +47,20 @@ public class RabbitMqProducer {
             return message;
         }, new CorrelationData(messageId));
     }
-
+    /**
+     * 工作队列模式发送消息
+     * @param exchange 交换机
+     * @param queue 队列名
+     * @param content 载荷
+     */
+    public void sendByWorkQueue(String exchange,String queue, Object content){
+        String messageId = UUID.randomUUID().toString();
+        log.info("开始发送Mq消息,messageId:{},消息队列:{},消息内容:{}",messageId, queue, new JSONObject(content).toString());
+        rabbitTemplate.convertAndSend(exchange,queue, content, message -> {
+            message.getMessageProperties().setMessageId(messageId);
+            return message;
+        }, new CorrelationData(messageId));
+    }
     /**
      * 工作队列模式发送带优先级消息
      * @param queue 队列名

+ 1 - 1
4dkankan-utils-reg/src/main/java/com/fdkankan/reg/RegCodeUtil.java

@@ -138,7 +138,7 @@ public class RegCodeUtil {
         }
     }
     public static  void main(String[] args) {
-        RegCodeUtil uat = RegCodeUtil.builder().env("PROD").build();
+        RegCodeUtil uat = RegCodeUtil.builder().env("UAT").build();
 
         String machineCode="8CA4224EB41BE3AD8998415EA0460F39845AC74625B3158A84AD18CEAC5FD6F4500CCC34309F7045F726AA6968F908C9";