|
@@ -1,6 +1,7 @@
|
|
package com.fdkankan.fyun.oss;
|
|
package com.fdkankan.fyun.oss;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.collection.ListUtil;
|
|
import cn.hutool.core.io.FileUtil;
|
|
import cn.hutool.core.io.FileUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
import com.alibaba.fastjson.JSON;
|
|
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.AmazonS3;
|
|
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
|
|
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
|
|
import com.amazonaws.services.s3.model.CannedAccessControlList;
|
|
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.GeneratePresignedUrlRequest;
|
|
import com.amazonaws.services.s3.model.GetObjectRequest;
|
|
import com.amazonaws.services.s3.model.GetObjectRequest;
|
|
import com.amazonaws.services.s3.model.PutObjectRequest;
|
|
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.common.Zone;
|
|
import com.qiniu.storage.Configuration;
|
|
import com.qiniu.storage.Configuration;
|
|
import com.qiniu.storage.UploadManager;
|
|
import com.qiniu.storage.UploadManager;
|
|
|
|
+import java.net.URLDecoder;
|
|
|
|
+import java.util.function.Consumer;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.fileupload.FileItem;
|
|
import org.apache.commons.fileupload.FileItem;
|
|
@@ -165,10 +169,16 @@ public class UploadToOssUtil {
|
|
case "local":FileUtil.del(key1); break;
|
|
case "local":FileUtil.del(key1); break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 删除目录或者文件
|
|
|
|
+ * @param prefix
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
public int deleteFile(String prefix){
|
|
public int deleteFile(String prefix){
|
|
switch (type){
|
|
switch (type){
|
|
case "oss":deleteOssFile(prefix); break;
|
|
case "oss":deleteOssFile(prefix); break;
|
|
- case "aws": deleteS3Object(prefix); break;
|
|
|
|
|
|
+ case "aws": deleteAwsFile(prefix); break;
|
|
case "local":FileUtil.del(prefix); break;
|
|
case "local":FileUtil.del(prefix); break;
|
|
}
|
|
}
|
|
return 1;
|
|
return 1;
|
|
@@ -188,15 +198,100 @@ public class UploadToOssUtil {
|
|
}
|
|
}
|
|
|
|
|
|
public void deleteOssFile(String prefix){
|
|
public void deleteOssFile(String prefix){
|
|
|
|
+ int maxKeys = 200;
|
|
OSSClient ossClient = new OSSClient(point, key, secrey);
|
|
OSSClient ossClient = new OSSClient(point, key, secrey);
|
|
- ObjectListing objectListing = ossClient.listObjects(bucket, prefix);
|
|
|
|
- List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
|
|
|
|
try {
|
|
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();
|
|
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();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|