|
@@ -1,10 +1,8 @@
|
|
|
package com.fdkankan.fyun.oss;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.aliyun.oss.OSSClient;
|
|
|
-import com.aliyun.oss.model.OSSObjectSummary;
|
|
|
-import com.aliyun.oss.model.ObjectListing;
|
|
|
-import com.aliyun.oss.model.ObjectMetadata;
|
|
|
-import com.aliyun.oss.model.PutObjectResult;
|
|
|
+import com.aliyun.oss.model.*;
|
|
|
import com.amazonaws.HttpMethod;
|
|
|
import com.amazonaws.auth.AWSStaticCredentialsProvider;
|
|
|
import com.amazonaws.auth.BasicAWSCredentials;
|
|
@@ -32,6 +30,7 @@ import java.io.*;
|
|
|
import java.net.FileNameMap;
|
|
|
import java.net.URL;
|
|
|
import java.net.URLConnection;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -520,4 +519,61 @@ public class UploadToOssUtil {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获得文件列表
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<String> listKeys(String sourcePath) {
|
|
|
+ OSSClient ossClient = new OSSClient(point, key, secrey);
|
|
|
+ List<String> keyList = new ArrayList<>();
|
|
|
+ boolean flag = true;
|
|
|
+ String maker = null;
|
|
|
+ do
|
|
|
+ {
|
|
|
+ ListObjectsRequest listObjectsRequest = new ListObjectsRequest(this.bucket);
|
|
|
+ listObjectsRequest.setPrefix(sourcePath); //指定下一级文件
|
|
|
+ listObjectsRequest.setMarker(maker); //获取下一页的起始点,它的下一项
|
|
|
+ listObjectsRequest.setMaxKeys(200);//设置分页的页容量
|
|
|
+// listObjectsRequest.setDelimiter("/");//跳出递归循环,只去指定目录下的文件。使用它时 Prefix文件路径要以“/”结尾
|
|
|
+ ObjectListing objectListing = ossClient.listObjects(listObjectsRequest);
|
|
|
+ List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
|
|
|
+ for (OSSObjectSummary objectSummary : objectSummaries) {
|
|
|
+ keyList.add(objectSummary.getKey());
|
|
|
+ }
|
|
|
+ maker = objectListing.getNextMarker();
|
|
|
+ flag = objectListing.isTruncated();//全部执行完后,为false
|
|
|
+ } while (flag);
|
|
|
+
|
|
|
+ return keyList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * <p>
|
|
|
+ 拷贝
|
|
|
+ * </p>
|
|
|
+ * @author dengsixing
|
|
|
+ * @date 2022/1/18
|
|
|
+ * @param keyList
|
|
|
+ * @param sourcePath
|
|
|
+ * @param targetPath
|
|
|
+ **/
|
|
|
+ public void copyFiles(String sourcePath, String targetPath) throws IOException {
|
|
|
+
|
|
|
+ //获取源文件列表
|
|
|
+ List<String> sourceKeyList = this.listKeys(sourcePath);
|
|
|
+ if(CollUtil.isEmpty(sourceKeyList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 创建OSSClient实例。
|
|
|
+ OSSClient ossClient = new OSSClient(point, key, secrey);
|
|
|
+ // 复制文件
|
|
|
+ sourceKeyList.parallelStream().forEach(key -> {
|
|
|
+ log.info("开始复制:" + key);
|
|
|
+ ossClient.copyObject(this.bucket, key, this.bucket, key.replace(sourcePath, targetPath));
|
|
|
+ log.info("复制成功:" + key);
|
|
|
+ });
|
|
|
+
|
|
|
+ ossClient.shutdown();
|
|
|
+ }
|
|
|
+
|
|
|
}
|