Java
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.AddBucketReplicationRequest;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 强烈建议不要把访问凭证保存到工程代码里,否则可能导致访问凭证泄露,威胁您账号下所有资源的安全。本代码示例以从环境变量中获取访问凭证为例。运行本代码示例之前,请先配置环境变量。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写源Bucket名称,例如src-bucket。
String bucketName = "src-bucket";
// 指定数据要复制到的目标Bucket。目标Bucket与源Bucket必须属于不同账号。
String targetBucketName = "dest-bucket";
// 指定目标Bucket所在地域。目标Bucket与源Bucket必须处于不同地域。
String targetBucketLocation = "oss-cn-shanghai";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
AddBucketReplicationRequest request = new AddBucketReplicationRequest(bucketName);
request.setTargetBucketName(targetBucketName);
request.setTargetBucketLocation(targetBucketLocation);
// 默认复制历史数据。此处设置为false,表示禁止复制历史数据。
request.setEnableHistoricalObjectReplication(false);
// 指定授权OSS进行数据复制的角色名称,且该角色必须已被授予源Bucket执行跨区域复制以及目标Bucket接收复制对象的权限。
request.setSyncRole("yourRole");
//List prefixes = new ArrayList();
//prefixes.add("image/");
//prefixes.add("video");
//prefixes.add("a");
//prefixes.add("A");
// 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
//request.setObjectPrefixList(prefixes);
//List actions = new ArrayList();
//actions.add(AddBucketReplicationRequest.ReplicationAction.PUT);
// 将源Bucket内Object的新增、更新操作复制到目标Bucket。
//request.setReplicationActionList(actions);
ossClient.addBucketReplication(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ReplicationRule
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# 填写源Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写源Bucket名称,例如src-bucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'src-bucket')
replica_config = ReplicationRule(
# 指定数据要复制到的目标Bucket。目标Bucket与源Bucket必须属于不同账号。
target_bucket_name='dest-bucket',
# 指定目标Bucket所在地域。目标Bucket与源Bucket必须处于不同地域。
target_bucket_location='oss-cn-shanghai',
# 指定授权OSS进行数据复制的角色名称,且该角色必须已被授予源Bucket执行跨区域复制以及目标Bucket接收复制对象的权限。
sync_role_name='roleNameTest',
)
# 指定待复制Object的前缀Prefix。指定Prefix后,只有匹配该Prefix的Object才会复制到目标Bucket。
# prefix_list = ['prefix1', 'prefix2']
# 设置数据复制规则。
# replica_config = ReplicationRule(
# prefix_list=prefix_list,
# 将源Bucket内Object的新增、更新操作复制到目标Bucket。
# action_list=[ReplicationRule.P],
# 指定数据要复制到的目标Bucket。目标Bucket与源Bucket必须属于不同账号。
# target_bucket_name='dest-bucket',
# 指定目标Bucket所在地域。目标Bucket与源Bucket必须处于不同地域。
# target_bucket_location='yourTargetBucketLocation',
# 默认复制历史数据。此处设置为False,表示禁止复制历史数据。
# is_enable_historical_object_replication=False,
# 指定数据复制时使用的数据传输链路。
# target_transfer_type='oss_acc',
#)
# 开启数据复制。
bucket.put_bucket_replication(replica_config)
Go
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// 定义全局变量
var (
region string // 存储区域
bucketName string // 存储空间名称
)
// init函数用于初始化命令行参数
func init() {
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}
func main() {
// 解析命令行参数
flag.Parse()
var (
targetBucket = "target bucket name" // 目标存储空间名称
targetLocation = "oss-cn-beijing" // 目标存储区域
)
// 检查bucket名称是否为空
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查region是否为空
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 加载默认配置并设置凭证提供者和区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// 创建OSS客户端
client := oss.NewClient(cfg)
// 创建开启存储空间数据复制的请求
request := &oss.PutBucketReplicationRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
ReplicationConfiguration: &oss.ReplicationConfiguration{
Rules: []oss.ReplicationRule{
{
RTC: &oss.ReplicationTimeControl{
Status: oss.Ptr("enabled"), // 在配置跨区域复制规则时,开启数据复制时间控制(RTC)功能
},
Destination: &oss.ReplicationDestination{
Bucket: oss.Ptr(targetBucket), // 目标存储空间名称
Location: oss.Ptr(targetLocation), // 目标存储区域
TransferType: oss.TransferTypeOssAcc, // 传输类型
},
HistoricalObjectReplication: oss.HistoricalObjectReplicationEnabled, // 开启历史数据复制功能
},
},
},
}
// 执行开启存储空间数据复制的请求
result, err := client.PutBucketReplication(context.TODO(), request)
if err != nil {
log.Fatalf("failed to put bucket replication %v", err)
}
// 打印开启存储空间数据复制的结果
log.Printf("put bucket replication result:%#v\n", result)
}