Przeglądaj źródła

oss 删除文件工具方法优化

dengsixing 3 lat temu
rodzic
commit
c9f85ce5af

+ 1 - 0
4dkankan-common-utils/src/main/java/com/fdkankan/common/constant/ErrorCode.java

@@ -143,6 +143,7 @@ public enum ErrorCode {
     FAILURE_CODE_5060(5060, "obj文件名应为mesh.obj"),
     FAILURE_CODE_5061(5061, "该压缩包无可用jpg文件"),
     FAILURE_CODE_5062(5062, "无可用jpg文件"),
+    FAILURE_CODE_5063(5063, "下载失败"),
 
 
     FAILURE_CODE_7001(7001, "激光场景状态同步失败,请重试!"),

+ 39 - 1
4dkankan-common-utils/src/main/java/com/fdkankan/common/util/TestUtil.java

@@ -1,7 +1,15 @@
 package com.fdkankan.common.util;
 
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import com.alibaba.fastjson.JSONArray;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
 
 /**
  * <p>
@@ -23,7 +31,37 @@ public class TestUtil {
     }
 
     public static void main(String[] args) {
-        System.out.println(residenceServiceHostName.contains(hostName));
+//        System.out.println(residenceServiceHostName.contains(hostName));
+//        Map<String, String> map = new HashMap<>();
+//        map.put("1","a");
+//        map.entrySet().stream().forEach(System.out::println);
+
+//        JSONArray jsonArray = new JSONArray();
+//        jsonArray.add(1);
+//        Integer[] arr = new Integer[jsonArray.size()];
+//        jsonArray.toArray(arr);
+//        Arrays.stream(arr).forEach(System.out::println);
+
+
+//        cn.hutool.core.io.FileUtil.del("F:\\test1");
+
+//        cn.hutool.core.io.FileUtil.copyFile("F:\\test", "F:\\test2");
+
+        List<String> list = new ArrayList<>();
+        for(int i = 1; i < 999; i++){
+            list.add("" + i);
+        }
+
+        ListUtil.page(list, 100, new Consumer<List<String>>() {
+            @Override
+            public void accept(List<String> strings) {
+                for (String string : strings) {
+                    System.out.println("a" + string);
+                }
+            }
+        });
+
+
     }
 
 }

+ 102 - 7
4dkankan-utils-fyun/src/main/java/com/fdkankan/fyun/oss/UploadToOssUtil.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fyun.oss;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
@@ -14,6 +15,7 @@ import com.amazonaws.regions.Regions;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
 import com.amazonaws.services.s3.model.CannedAccessControlList;
+import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
 import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
 import com.amazonaws.services.s3.model.GetObjectRequest;
 import com.amazonaws.services.s3.model.PutObjectRequest;
@@ -25,6 +27,8 @@ import com.fdkankan.fyun.constant.StorageType;
 import com.qiniu.common.Zone;
 import com.qiniu.storage.Configuration;
 import com.qiniu.storage.UploadManager;
+import java.net.URLDecoder;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.fileupload.FileItem;
@@ -165,10 +169,16 @@ public class UploadToOssUtil {
 			case "local":FileUtil.del(key1);  break;
 		}
 	}
+
+	/**
+	 * 删除目录或者文件
+	 * @param prefix
+	 * @return
+	 */
 	public int deleteFile(String prefix){
 		switch (type){
 			case "oss":deleteOssFile(prefix); break;
-			case "aws": deleteS3Object(prefix); break;
+			case "aws": deleteAwsFile(prefix); break;
 			case "local":FileUtil.del(prefix);  break;
 		}
 		return 1;
@@ -188,15 +198,100 @@ public class UploadToOssUtil {
 	}
 
 	public void deleteOssFile(String prefix){
+		int maxKeys = 200;
 		OSSClient ossClient = new OSSClient(point, key, secrey);
-		ObjectListing objectListing = ossClient.listObjects(bucket, prefix);
-		List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
 		try {
-			for (OSSObjectSummary s : sums) {
-				delete(s.getKey());
-			}
-		} catch (IOException e) {
+
+			String nextMarker = null;
+			ObjectListing objectListing;
+
+			do {
+				objectListing = ossClient.listObjects(new ListObjectsRequest(this.bucket).withPrefix(prefix).withMarker(nextMarker).withMaxKeys(maxKeys));
+				List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
+				if (CollUtil.isEmpty(sums)) {
+					return;
+				}
+				List<String> keys = new ArrayList<>();
+				for (OSSObjectSummary sum : sums) {
+					keys.add(sum.getKey());
+				}
+				DeleteObjectsRequest deleteObjectsRequest =
+					new DeleteObjectsRequest(bucket).withKeys(keys).withEncodingType("url");
+				DeleteObjectsResult deleteObjectsResult = ossClient
+					.deleteObjects(deleteObjectsRequest);
+				List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
+				try {
+					for (String deletedObject : deletedObjects) {
+						String decode = URLDecoder.decode(deletedObject, "UTF-8");
+						log.info("删除oss文件:{}", decode);
+					}
+				} catch (UnsupportedEncodingException e) {
+					e.printStackTrace();
+				}
+
+//				ListUtil.page(keys, 100, subKeys -> {
+//					DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket)
+//						.withKeys(
+//							subKeys).withEncodingType("url");
+//					DeleteObjectsResult deleteObjectsResult = ossClient
+//						.deleteObjects(deleteObjectsRequest);
+//					List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
+//					try {
+//						for (String deletedObject : deletedObjects) {
+//							String decode = URLDecoder.decode(deletedObject, "UTF-8");
+//							log.info("删除oss文件:{}", decode);
+//						}
+//					} catch (UnsupportedEncodingException e) {
+//						e.printStackTrace();
+//					}
+//				});
+			}while (objectListing.isTruncated());
+		}catch (Exception  e){
 			e.printStackTrace();
+		}finally {
+			if(ossClient != null){
+				ossClient.shutdown();
+			}
+		}
+	}
+
+	private void deleteAwsFile(String prefix){
+
+		int maxKeys = 200;
+		String nextMaker = null;
+		BasicAWSCredentials awsCreds = new BasicAWSCredentials(s3key, s3secrey);
+		AmazonS3 s3 = AmazonS3ClientBuilder.standard()
+			.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
+			.withRegion(Regions.EU_WEST_2)
+			.build();
+		try {
+			com.amazonaws.services.s3.model.ListObjectsRequest listObjectsRequest = new com.amazonaws.services.s3.model.ListObjectsRequest();
+			listObjectsRequest.setBucketName(this.bucket);
+			listObjectsRequest.setPrefix(prefix);
+			listObjectsRequest.setMaxKeys(maxKeys);
+
+			com.amazonaws.services.s3.model.ObjectListing objectListing;
+			do{
+				listObjectsRequest.setMarker(nextMaker);
+				objectListing = s3.listObjects(listObjectsRequest);
+				List<S3ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
+				List<KeyVersion> keys =objectSummaries.stream().map(summary->new KeyVersion(summary.getKey())).collect(Collectors.toList());
+
+				com.amazonaws.services.s3.model.DeleteObjectsRequest multiObjectDeleteRequest =
+					new com.amazonaws.services.s3.model.DeleteObjectsRequest(this.bucket)
+					.withKeys(keys)
+					.withQuiet(false);
+				com.amazonaws.services.s3.model.DeleteObjectsResult delObjRes = s3.deleteObjects(multiObjectDeleteRequest);
+				int successfulDeletes = delObjRes.getDeletedObjects().size();
+				log.info("删除aws文件成功,删除文件数;{}", successfulDeletes);
+				nextMaker = objectListing.getNextMarker();
+			}while (objectListing.isTruncated());
+		}catch (Exception e){
+			log.error("删除was文件失败,path="+prefix, e);
+		}finally {
+			if(s3 != null){
+				s3.shutdown();
+			}
 		}
 	}
 

+ 2 - 0
4dkankan-utils-mongodb/src/main/java/com/fdkankan/mongodb/base/BaseMongoEntity.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import lombok.Data;
 
 import java.util.Date;
+import org.springframework.data.mongodb.core.mapping.Field;
 
 /**
  * @author Xiewj
@@ -17,6 +18,7 @@ public class BaseMongoEntity {
    private String id;
 
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+   @Field("createTime")
    private Date createTime;
 
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

+ 2 - 0
4dkankan-utils-mongodb/src/main/java/com/fdkankan/mongodb/base/MongoPageResult.java

@@ -3,6 +3,7 @@ package com.fdkankan.mongodb.base;
 
 
 import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -16,6 +17,7 @@ import java.util.List;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
+@Builder
 public class MongoPageResult<T> {
 
    /**

+ 0 - 0
4dkankan-utils-mongodb/src/main/java/com/fdkankan/mongodb/file.txt


+ 7 - 12
4dkankan-utils-mongodb/src/main/java/com/fdkankan/mongodb/service/impl/MongodbBaseServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fdkankan.mongodb.service.impl;
 
+import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.ObjectUtil;
 import com.fdkankan.mongodb.base.BaseRequestMongo;
 import com.fdkankan.mongodb.base.MongoPageResult;
@@ -76,37 +77,31 @@ public class MongodbBaseServiceImpl<T> implements MongodbBaseService<T> {
         if (page.getPageNum() <= 0 || page.getPageNum() > pages) {
             page.setPageNum(FIRST_PAGE_NUM);
         }
-        final Criteria criteria = new Criteria();
         if (StringUtils.isNotBlank(page.getLastId())) {
+            final Criteria criteria = new Criteria(UUID.randomUUID().toString());
             if (page.getPageNum() != FIRST_PAGE_NUM) {
                 criteria.and(ID).gt(new ObjectId(page.getLastId()));
             }
             query.limit(page.getPageSize());
+            query.addCriteria(criteria);
         } else {
             int skip = page.getPageSize() * (page.getPageNum() - 1);
             query.skip(skip).limit(page.getPageSize());
         }
         List<T> entityList=null;
         if (page.getSortBy().toUpperCase(Locale.ROOT).equals(Sort.Direction.DESC.name())){
-            entityList =mongoTemplate
-                    .find(query.addCriteria(criteria)
-                                    .with( Sort.by(Collections.singletonList(new Sort.Order(Sort.Direction.DESC, page.getOrderBy())))),
-                            getTClass());
+            query.with(Sort.by(Collections.singletonList(new Sort.Order(Sort.Direction.DESC, page.getOrderBy()))));
         }else {
-            entityList=mongoTemplate
-                    .find(query.addCriteria(criteria)
-                                    .with( Sort.by(Collections.singletonList(new Sort.Order(Sort.Direction.ASC,  page.getOrderBy())))),
-                            getTClass());
+            query.with(Sort.by(Collections.singletonList(new Sort.Order(Sort.Direction.ASC, page.getOrderBy()))));
         }
-
-
+        entityList=mongoTemplate.find(query, getTClass());
 
         MongoPageResult<T> mongoPageResult = new MongoPageResult<>();
         mongoPageResult.setTotal(total);
         mongoPageResult.setPages(pages);
         mongoPageResult.setPageSize(page.getPageSize());
         mongoPageResult.setPageNum(page.getPageNum());
-        mongoPageResult.setList(entityList.stream().collect(Collectors.toList()));
+        mongoPageResult.setList(entityList);
         return mongoPageResult;
     }
 

+ 5 - 0
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/constant/RedisKey.java

@@ -119,6 +119,11 @@ public class RedisKey {
      */
     public static final String TOKEN_V3 = "token#%s";
 
+    /**
+     * 管理后台菜单缓存-hash
+     */
+    public static final String MANAGE_MENU = "manage:menu";
+
 
 
 

+ 2 - 2
4dkankan-utils-redis/src/main/java/com/fdkankan/redis/util/RedisUtil.java

@@ -158,8 +158,8 @@ public class RedisUtil<K, V>{
      * @param item 项 不能为null
      * @return 值
      */
-    public Object hget(String key, String item) {
-        return redisTemplate.opsForHash().get(key, item);
+    public String hget(String key, String item) {
+        return (String)redisTemplate.opsForHash().get(key, item);
     }
     /**
      * 获取hashKey对应的所有键值