Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.idea/
.project
db/*
log/*
*.iml
target/
13 changes: 10 additions & 3 deletions conf/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ type=migrateLocal
secretId=AKIDXXXXXXXXXXXXXXXXXXXXXXX
# 用户的秘钥 secret_key (可在 https://console.qcloud.com/capi 查看)
secretKey=yyyyyyyyyyyyyyyyyyyyyyyyyyy
# 如果使用临时密钥访问存储桶,此处配置临时密钥的Token,该密钥需要有目的桶的PutObject权限(如果迁移类型是migrateBucketCopy,则该密钥需要有源桶的GetObject权限以及目的桶的PutObject权限)
# token=zzzzzzzzzzzzzzzzz
# 目的Bucket的名称, 命名规则为{name}-{appid},即bucket名必须包含appid, 例如movie-1251000000
bucketName=mybucket-1251668577
# 目的bucket的region信息. COS地域的简称请参照 https://www.qcloud.com/document/product/436/6224
Expand Down Expand Up @@ -99,8 +101,6 @@ srcHttps=off
# 访问ali时, 读取ali响应的超时时间,单位ms, 默认10000
#srcSocketTimeout=10000



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

[migrateCsp]
bucket=xxx
Expand Down
Binary file modified dep/cos_migrate_tool-1.0-jar-with-dependencies.jar
Binary file not shown.
12 changes: 12 additions & 0 deletions src/main/java/com/qcloud/cos_migrate_tool/config/CommonConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class CommonConfig {
private String region;
private String ak;
private String sk;
private String token;
private String cosPath;
private boolean enableHttps;
private boolean entireFileMd5Attached;
Expand Down Expand Up @@ -157,6 +158,17 @@ public void setSk(String sk) {
this.sk = sk;
}

public String getToken() {
return token;
}

public void setToken(String token) {
if (token.trim().isEmpty()) {
throw new IllegalArgumentException("token is empty");
}
this.token = token.trim();
}

public String getCosPath() {
return cosPath;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public class ConfigParser {
private static final String COMMON_BUCKETNAME = "bucketName";
private static final String COMMON_AK = "secretId";
private static final String COMMON_SK = "secretKey";
private static final String COMMON_TOKEN = "token";
private static final String COMMON_COSPATH = "cosPath";
private static final String COMMON_DB_COSPATH = "dbCosPath";
private static final String COMMON_HTTPS = "https";
Expand Down Expand Up @@ -94,6 +95,7 @@ public class ConfigParser {
private static final String COPY_SRC_BUCKETNAME = "srcBucketName";
private static final String COPY_SRC_SECRETID = "srcSecretId";
private static final String COPY_SRC_SECRETKEY = "srcSecretKey";
private static final String COPY_SRC_TOKEN = "srcToken";
private static final String COPY_SRC_COSPATH = "srcCosPath";
private static final String COPY_SRC_ENDPOINT_SUFFIX = "srcEndPointSuffix";
private static final String COPY_SRC_FILE_LIST = "srcFileList";
Expand Down Expand Up @@ -457,7 +459,10 @@ private boolean initCommonConfig(Preferences prefs, CommonConfig commonConfig) {
assert (sk != null);
commonConfig.setSk(sk);


String token = getConfigValue(prefs, COMMON_SECTION_NAME, COMMON_TOKEN);
if (token != null) {
commonConfig.setToken(token);
}
}

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

String token = getConfigValue(prefs, COPY_BUCKET_SECTION_NAME, COPY_SRC_TOKEN);
if (token != null && !token.trim().isEmpty()) {
copyBucketConfig.setSrcToken(token);
}

String srcCosPath = getConfigValue(prefs, COPY_BUCKET_SECTION_NAME, COPY_SRC_COSPATH);
assert (srcCosPath != null);
copyBucketConfig.setSrcCosPath(srcCosPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class CopyBucketConfig extends CommonConfig {
private String srcBucket;
private String srcAk;
private String srcSk;
private String srcToken;
private String srcCosPath;
private String srcEndpointSuffix;
private String srcFileList = "";
Expand Down Expand Up @@ -74,6 +75,17 @@ public void setSrcSk(String srcSk) {
this.srcSk = srcSk.trim();
}

public String getSrcToken() {
return srcToken;
}

public void setSrcToken(String srcToken) {
if (srcToken.trim().isEmpty()) {
throw new IllegalArgumentException("srcToken is empty");
}
this.srcToken = srcToken.trim();
}

public String getSrcCosPath() {
return srcCosPath;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.BasicSessionCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.COSObjectSummary;
Expand All @@ -38,8 +39,15 @@ public class MigrateCopyBucketTaskExecutor extends TaskExecutor {

public MigrateCopyBucketTaskExecutor(CopyBucketConfig config) {
super(MigrateType.MIGRATE_FROM_COS_BUCKET_COPY, config);

COSCredentials srcCred = new BasicCOSCredentials(config.getSrcAk(), config.getSrcSk());
String src_token = ((CopyBucketConfig) config).getSrcToken();
COSCredentials srcCred = null;
if (src_token != null && !src_token.isEmpty()) {
log.info("Use temporary token to list object");
System.out.println("Use temporary token to list object");
srcCred = new BasicSessionCredentials(config.getSrcAk(), config.getSrcSk(), src_token);
} else {
srcCred = new BasicCOSCredentials(config.getSrcAk(), config.getSrcSk());
}
ClientConfig clientConfig = new ClientConfig(new Region(config.getSrcRegion()));
if (config.isEnableHttps()) {
clientConfig.setHttpProtocol(HttpProtocol.https);
Expand Down
15 changes: 14 additions & 1 deletion src/main/java/com/qcloud/cos_migrate_tool/task/TaskExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

import com.qcloud.cos.auth.BasicSessionCredentials;
import com.qcloud.cos_migrate_tool.config.CopyBucketConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

COSCredentials cred = new BasicCOSCredentials(config.getAk(), config.getSk());
COSCredentials cred = null;
String token = config.getToken();
// supporting temporary token
if (token != null && !token.isEmpty()) {
log.info("Use temporary token to put object");
System.out.println("Use temporary token to put object");
cred = new BasicSessionCredentials(config.getAk(), config.getSk(), token);
} else {
cred = new BasicCOSCredentials(config.getAk(), config.getSk());
}

//COSCredentials cred = new BasicCOSCredentials(config.getAk(), config.getSk());
ClientConfig clientConfig = new ClientConfig(new Region(config.getRegion()));
if (config.isEnableHttps()) {
clientConfig.setHttpProtocol(HttpProtocol.https);
Expand Down