Procházet zdrojové kódy

增加列举oss文件大小

dsx před 2 roky
rodič
revize
c26856d787

+ 42 - 17
src/main/java/com/fdkankan/job/job/CountSizeOssHandler.java

@@ -7,6 +7,7 @@ import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.ListObjectsRequest;
 import com.aliyun.oss.model.OSSObjectSummary;
 import com.aliyun.oss.model.ObjectListing;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -24,9 +25,11 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.io.File;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -56,27 +59,49 @@ public class CountSizeOssHandler {
         }
 
         Map<String, Long> map = new HashMap<>();
-        ObjectListing objectListing = ossClient.listObjects("4dkankan", dirs);
-        for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
-            String key = objectSummary.getKey();
-            String[] split = key.split("/");
-            key = split[1];
-            Long size = map.get(key);
-            if(Objects.isNull(size)){
-                size = 0L;
+
+        try {
+            boolean flag = true;
+            String nextMaker = null;
+            ListObjectsRequest listObjectsRequest = new ListObjectsRequest("4dkankan");
+            //指定下一级文件
+            listObjectsRequest.setPrefix(dirs);
+            //设置分页的页容量
+            listObjectsRequest.setMaxKeys(200);
+            do {
+                //获取下一页的起始点,它的下一项
+                listObjectsRequest.setMarker(nextMaker);
+                ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
+                for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
+                    String key = objectSummary.getKey();
+                    String[] split = key.split("/");
+                    key = split[1];
+                    Long size = map.get(key);
+                    if(Objects.isNull(size)){
+                        size = 0L;
+                    }
+                    size += objectSummary.getSize();
+                    map.put(key, size);
+                }
+
+                nextMaker = objectListing.getNextMarker();
+                //全部执行完后,为false
+                flag = objectListing.isTruncated();
+            } while (flag);
+
+            Set<String> strings = map.keySet();
+            Long total = 0L;
+            for (String key : strings) {
+                total += map.get(key);
+                log.info(key + ":" + map.get(key));
             }
-            size += objectSummary.getSize();
-            map.put(key, size);
-        }
 
-        Set<String> strings = map.keySet();
-        Long total = 0L;
-        for (String key : strings) {
-            total += map.get(key);
-            log.info(key + ":" + map.get(key));
+            log.info("总大小:{}", total);
+
+        } catch (Exception e) {
         }
 
-        log.info("总大小:{}", total);
+
 
         XxlJobHelper.log("countSizeOssHandler end.....");
     }