|
@@ -1,5 +1,6 @@
|
|
|
package com.fdkankan.fyun.oss;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import com.aliyun.oss.HttpMethod;
|
|
|
import com.aliyun.oss.OSS;
|
|
|
import com.aliyun.oss.model.*;
|
|
@@ -321,4 +322,58 @@ public class OssFileService extends AbstractFYunFileService {
|
|
|
return totalSubFileNum;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void restoreFolder(String bucket, String folderName, Integer priority) {
|
|
|
+
|
|
|
+ List<String> objectList = this.listRemoteFiles(bucket, folderName);
|
|
|
+ if(CollUtil.isEmpty(objectList)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ objectList.parallelStream().forEach(objectName -> {
|
|
|
+ this.restoreFile(bucket, objectName, priority);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void restoreFile(String bucket, String objectName, Integer priority){
|
|
|
+ ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucket, objectName);
|
|
|
+
|
|
|
+ // 校验Object是否为归档类型Object。
|
|
|
+ StorageClass storageClass = objectMetadata.getObjectStorageClass();
|
|
|
+ if (storageClass == StorageClass.ColdArchive) {
|
|
|
+ // 设置解冻冷归档Object的优先级。
|
|
|
+ // RestoreTier.RESTORE_TIER_EXPEDITED 表示1小时内完成解冻。
|
|
|
+ // RestoreTier.RESTORE_TIER_STANDARD 表示2~5小时内完成解冻。
|
|
|
+ // RestoreTier.RESTORE_TIER_BULK 表示5~12小时内完成解冻。
|
|
|
+ RestoreTier restoreTier = null;
|
|
|
+ switch (priority){
|
|
|
+ case 1 :
|
|
|
+ restoreTier = RestoreTier.RESTORE_TIER_EXPEDITED;
|
|
|
+ break;
|
|
|
+ case 2 :
|
|
|
+ restoreTier = RestoreTier.RESTORE_TIER_STANDARD;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ restoreTier = RestoreTier.RESTORE_TIER_BULK;
|
|
|
+ }
|
|
|
+ RestoreJobParameters jobParameters = new RestoreJobParameters(restoreTier);
|
|
|
+ // 配置解冻参数,以设置5小时内解冻完成,解冻状态保持2天为例。
|
|
|
+ // 第一个参数表示保持解冻状态的天数,默认是1天,此参数适用于解冻Archive(归档)与ColdArchive(冷归档)类型Object。
|
|
|
+ // 第二个参数jobParameters表示解冻优先级,只适用于解冻ColdArchive类型Object。
|
|
|
+ RestoreConfiguration configuration = new RestoreConfiguration(1, jobParameters);
|
|
|
+ //开始解冻
|
|
|
+ ossClient.restoreObject(bucket, objectName, configuration);
|
|
|
+ // 等待解冻完成。
|
|
|
+ do {
|
|
|
+ try {
|
|
|
+ Thread.sleep(1000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ objectMetadata = ossClient.getObjectMetadata(bucket, objectName);
|
|
|
+ } while (!objectMetadata.isRestoreCompleted());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|