Pārlūkot izejas kodu

修改删除文件逻辑

tianboguang 2 gadi atpakaļ
vecāks
revīzija
96f74827c2

+ 21 - 5
4dkankan-utils-fyun-oss/src/main/java/com/fdkankan/fyun/oss/OssFileService.java

@@ -125,13 +125,29 @@ public class OssFileService extends AbstractFYunFileService {
     @Override
     public void deleteFolder(String bucket, String remoteFolderPath) {
         try {
-            List<String> remoteFiles = listRemoteFiles(bucket, remoteFolderPath);
-            if (CollectionUtils.isEmpty(remoteFiles)) {
-                return;
+            if (!remoteFolderPath.endsWith(File.separator)) {
+                remoteFolderPath = remoteFolderPath + File.separator;
             }
+
+            boolean flag = true;
+            String nextMaker = null;
+            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucket).withPrefix(remoteFolderPath).withMaxKeys(1000);
+
             DeleteObjectsRequest request = new DeleteObjectsRequest(bucket);
-            request.setKeys(remoteFiles);
-            ossClient.deleteObjects(request);
+            do {
+                //获取下一页的起始点,它的下一项
+                listObjectsRequest.setMarker(nextMaker);
+                ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
+                List<String> keys = objectListing.getObjectSummaries().parallelStream()
+                        .map(OSSObjectSummary::getKey).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(keys)) {
+                    request.setKeys(keys);
+                    ossClient.deleteObjects(request);
+                }
+                nextMaker = objectListing.getNextMarker();
+                //全部执行完后,为false
+                flag = objectListing.isTruncated();
+            } while (flag);
         } catch (Exception e) {
             log.error("OSS删除文件失败,key:" + remoteFolderPath, e);
         }

+ 6 - 1
4dkankan-utils-fyun-s3/src/main/java/com/fdkankan/fyun/s3/S3FileService.java

@@ -139,7 +139,12 @@ public class S3FileService extends AbstractFYunFileService {
     @Override
     public void deleteFolder(String bucket, String remoteFolderPath){
         try {
-            int maxKeys = 200;
+
+            if (!remoteFolderPath.endsWith(File.separator)) {
+                remoteFolderPath = remoteFolderPath + File.separator;
+            }
+
+            int maxKeys = 1000;
             String nextMaker = null;
 
             ListObjectsRequest listObjectsRequest = new ListObjectsRequest();