Skip to content

Commit 30732c3

Browse files
Merge pull request #24 from jackyding2679/temporaty_token
support temporary token to migrate cos bucket
2 parents e231066 + 6b4c14f commit 30732c3

File tree

8 files changed

+75
-7
lines changed

8 files changed

+75
-7
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.idea/
2+
.project
3+
db/*
4+
log/*
5+
*.iml
6+
target/

conf/config.ini

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ type=migrateLocal
1313
secretId=AKIDXXXXXXXXXXXXXXXXXXXXXXX
1414
# 用户的秘钥 secret_key (可在 https://console.qcloud.com/capi 查看)
1515
secretKey=yyyyyyyyyyyyyyyyyyyyyyyyyyy
16+
# 如果使用临时密钥访问存储桶,此处配置临时密钥的Token,该密钥需要有目的桶的PutObject权限(如果迁移类型是migrateBucketCopy,则该密钥需要有源桶的GetObject权限以及目的桶的PutObject权限)
17+
# token=zzzzzzzzzzzzzzzzz
1618
# 目的Bucket的名称, 命名规则为{name}-{appid},即bucket名必须包含appid, 例如movie-1251000000
1719
bucketName=mybucket-1251668577
1820
# 目的bucket的region信息. COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
@@ -99,8 +101,6 @@ srcHttps=off
99101
# 访问ali时, 读取ali响应的超时时间,单位ms, 默认10000
100102
#srcSocketTimeout=10000
101103

102-
103-
104104
# 从七牛迁移到COS
105105
[migrateQiniu]
106106
# 从七牛迁移到COS的配置分节
@@ -165,8 +165,15 @@ srcEndPointSuffix=
165165
srcSecretId=xxxxxxxxxxx
166166
# 源bucket隶属的用户的秘钥 secret_key(可在 https://console.qcloud.com/capi 查看)
167167
srcSecretKey=yyyyyyyyyyyyyyyy
168-
# 要迁移的cos路径的
168+
# 如果使用临时密钥访问存储桶,此处配置临时密钥的Token,该密钥需要有源桶的GetBucket(列出存储桶对象)和HeadObject权限
169+
# srcToken=zzzzzzzzzzz
170+
# 要迁移的cos路径的
169171
srcCosPath=/
172+
# 如果只需要迁移部分文件,可以通过srcFileList指定迁移文件列表,例如,只需要迁移aaa/1.jpg和bb/2.jpg,则:
173+
# $cat /data/fileList.txt
174+
# aaa/1.jpg
175+
# bbb/2.jpg
176+
#srcFileList=/data/fileList.txt
170177

171178
[migrateCsp]
172179
bucket=xxx
556 Bytes
Binary file not shown.

src/main/java/com/qcloud/cos_migrate_tool/config/CommonConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class CommonConfig {
1717
private String region;
1818
private String ak;
1919
private String sk;
20+
private String token;
2021
private String cosPath;
2122
private boolean enableHttps;
2223
private boolean entireFileMd5Attached;
@@ -157,6 +158,17 @@ public void setSk(String sk) {
157158
this.sk = sk;
158159
}
159160

161+
public String getToken() {
162+
return token;
163+
}
164+
165+
public void setToken(String token) {
166+
if (token.trim().isEmpty()) {
167+
throw new IllegalArgumentException("token is empty");
168+
}
169+
this.token = token.trim();
170+
}
171+
160172
public String getCosPath() {
161173
return cosPath;
162174
}

src/main/java/com/qcloud/cos_migrate_tool/config/ConfigParser.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class ConfigParser {
3434
private static final String COMMON_BUCKETNAME = "bucketName";
3535
private static final String COMMON_AK = "secretId";
3636
private static final String COMMON_SK = "secretKey";
37+
private static final String COMMON_TOKEN = "token";
3738
private static final String COMMON_COSPATH = "cosPath";
3839
private static final String COMMON_DB_COSPATH = "dbCosPath";
3940
private static final String COMMON_HTTPS = "https";
@@ -94,6 +95,7 @@ public class ConfigParser {
9495
private static final String COPY_SRC_BUCKETNAME = "srcBucketName";
9596
private static final String COPY_SRC_SECRETID = "srcSecretId";
9697
private static final String COPY_SRC_SECRETKEY = "srcSecretKey";
98+
private static final String COPY_SRC_TOKEN = "srcToken";
9799
private static final String COPY_SRC_COSPATH = "srcCosPath";
98100
private static final String COPY_SRC_ENDPOINT_SUFFIX = "srcEndPointSuffix";
99101
private static final String COPY_SRC_FILE_LIST = "srcFileList";
@@ -457,7 +459,10 @@ private boolean initCommonConfig(Preferences prefs, CommonConfig commonConfig) {
457459
assert (sk != null);
458460
commonConfig.setSk(sk);
459461

460-
462+
String token = getConfigValue(prefs, COMMON_SECTION_NAME, COMMON_TOKEN);
463+
if (token != null) {
464+
commonConfig.setToken(token);
465+
}
461466
}
462467

463468
String cosPathConfig = getConfigValue(prefs, COMMON_SECTION_NAME, COMMON_COSPATH);
@@ -893,6 +898,11 @@ private boolean initCopyBucketConfig(Preferences prefs, CopyBucketConfig copyBuc
893898
assert (srcSecretKey != null);
894899
copyBucketConfig.setSrcSk(srcSecretKey);
895900

901+
String token = getConfigValue(prefs, COPY_BUCKET_SECTION_NAME, COPY_SRC_TOKEN);
902+
if (token != null && !token.trim().isEmpty()) {
903+
copyBucketConfig.setSrcToken(token);
904+
}
905+
896906
String srcCosPath = getConfigValue(prefs, COPY_BUCKET_SECTION_NAME, COPY_SRC_COSPATH);
897907
assert (srcCosPath != null);
898908
copyBucketConfig.setSrcCosPath(srcCosPath);

src/main/java/com/qcloud/cos_migrate_tool/config/CopyBucketConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class CopyBucketConfig extends CommonConfig {
1111
private String srcBucket;
1212
private String srcAk;
1313
private String srcSk;
14+
private String srcToken;
1415
private String srcCosPath;
1516
private String srcEndpointSuffix;
1617
private String srcFileList = "";
@@ -74,6 +75,17 @@ public void setSrcSk(String srcSk) {
7475
this.srcSk = srcSk.trim();
7576
}
7677

78+
public String getSrcToken() {
79+
return srcToken;
80+
}
81+
82+
public void setSrcToken(String srcToken) {
83+
if (srcToken.trim().isEmpty()) {
84+
throw new IllegalArgumentException("srcToken is empty");
85+
}
86+
this.srcToken = srcToken.trim();
87+
}
88+
7789
public String getSrcCosPath() {
7890
return srcCosPath;
7991
}

src/main/java/com/qcloud/cos_migrate_tool/task/MigrateCopyBucketTaskExecutor.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.qcloud.cos.COSClient;
1616
import com.qcloud.cos.ClientConfig;
1717
import com.qcloud.cos.auth.BasicCOSCredentials;
18+
import com.qcloud.cos.auth.BasicSessionCredentials;
1819
import com.qcloud.cos.auth.COSCredentials;
1920
import com.qcloud.cos.http.HttpProtocol;
2021
import com.qcloud.cos.model.COSObjectSummary;
@@ -38,8 +39,15 @@ public class MigrateCopyBucketTaskExecutor extends TaskExecutor {
3839

3940
public MigrateCopyBucketTaskExecutor(CopyBucketConfig config) {
4041
super(MigrateType.MIGRATE_FROM_COS_BUCKET_COPY, config);
41-
42-
COSCredentials srcCred = new BasicCOSCredentials(config.getSrcAk(), config.getSrcSk());
42+
String src_token = ((CopyBucketConfig) config).getSrcToken();
43+
COSCredentials srcCred = null;
44+
if (src_token != null && !src_token.isEmpty()) {
45+
log.info("Use temporary token to list object");
46+
System.out.println("Use temporary token to list object");
47+
srcCred = new BasicSessionCredentials(config.getSrcAk(), config.getSrcSk(), src_token);
48+
} else {
49+
srcCred = new BasicCOSCredentials(config.getSrcAk(), config.getSrcSk());
50+
}
4351
ClientConfig clientConfig = new ClientConfig(new Region(config.getSrcRegion()));
4452
if (config.isEnableHttps()) {
4553
clientConfig.setHttpProtocol(HttpProtocol.https);

src/main/java/com/qcloud/cos_migrate_tool/task/TaskExecutor.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.util.concurrent.Semaphore;
1111
import java.util.concurrent.TimeUnit;
1212

13+
import com.qcloud.cos.auth.BasicSessionCredentials;
14+
import com.qcloud.cos_migrate_tool.config.CopyBucketConfig;
1315
import org.slf4j.Logger;
1416
import org.slf4j.LoggerFactory;
1517

@@ -57,7 +59,18 @@ public TaskExecutor(MigrateType migrateType, CommonConfig config) {
5759
this.smallFileUploadExecutorNum = config.getSmallFileExecutorNumber();
5860
this.bigFileUploadExecutorNum = config.getBigFileExecutorNum();
5961

60-
COSCredentials cred = new BasicCOSCredentials(config.getAk(), config.getSk());
62+
COSCredentials cred = null;
63+
String token = config.getToken();
64+
// supporting temporary token
65+
if (token != null && !token.isEmpty()) {
66+
log.info("Use temporary token to put object");
67+
System.out.println("Use temporary token to put object");
68+
cred = new BasicSessionCredentials(config.getAk(), config.getSk(), token);
69+
} else {
70+
cred = new BasicCOSCredentials(config.getAk(), config.getSk());
71+
}
72+
73+
//COSCredentials cred = new BasicCOSCredentials(config.getAk(), config.getSk());
6174
ClientConfig clientConfig = new ClientConfig(new Region(config.getRegion()));
6275
if (config.isEnableHttps()) {
6376
clientConfig.setHttpProtocol(HttpProtocol.https);

0 commit comments

Comments
 (0)