更新时间:2026-04-02 GMT+08:00
分享

设置桶的跨区域复制(Java SDK)

功能介绍

设置桶的跨区域复制配置

开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。

方法定义

obsClient.setBucketReplication(SetBucketReplicationRequest request)

请求参数说明

表1 请求参数列表

参数名称

参数类型

是否必选

描述

request

SetBucketReplicationRequest

必选

参数解释:

设置桶的跨区域复制请求,详见SetBucketReplicationRequest。

表2 SetBucketReplicationRequest

参数名称

参数类型

是否必选

描述

bucketName

String

必选

参数解释

桶名。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

replicationConfiguration

ReplicationConfiguration

必选

参数解释:

桶的跨区域复制配置。

取值范围:

详见ReplicationConfiguration

默认取值:

表3 ReplicationConfiguration

参数名称

参数类型

是否必选

描述

agency

String

必选

参数解释:

用户创建的委托名字,最大长度为64字符。

取值范围:

默认取值:

rules

List<Rule>

必选

参数解释:

桶的跨区域复制配置规则。

约束限制:

桶的跨区域复制配置必须至少配置一条规则,最多能达到100条规则。

取值范围:

详见Rule

默认取值:

表4 Rule

参数名称

参数类型

是否必选

描述

id

String

可选

参数解释:

桶的跨区域复制配置规则的特殊辨识符。

约束限制:

最大长度为255字符。

取值范围:

默认取值:

status

RuleStatusEnum

必选

参数解释:

桶的跨区域复制配置规则启用状态。

取值范围:

详见RuleStatusEnum

默认取值:

ENABLED

prefix

String

必选

参数解释:

对象键值名的前缀,适配于一个或者多个对象。

约束限制:

如果前缀配置为空,则跨区域复制规则将作用于整个桶。经过UTF-8编码的长度大于0且不超过1024的字符序列,不支持重叠的前缀。

取值范围:

默认取值:

destination

Destination

必选

参数解释:

目标桶信息。

取值范围:

详见Destination

默认取值:

historicalObjectReplication

HistoricalObjectReplicationEnum

可选

参数解释:

是否复制历史对象。

取值范围:

详见HistoricalObjectReplicationEnum

默认取值:

DISABLED

表5 RuleStatusEnum

常量名

原始值

说明

ENABLED

Enabled

如果Status为Enabled,这条规则不会被忽略。

DISABLED

Disabled

如果Status为Disabled,这条规则会被忽略。

表6 HistoricalObjectReplicationEnum

常量名

原始值

说明

ENABLED

Enabled

历史对象复制关键字,如果为Enabled,会复制符合这条规则的历史对象。

DISABLED

Disabled

历史对象复制关键字,如果为Disabled,不会复制符合这条规则的历史对象。

表7 Destination

参数名称

参数类型

是否必选

描述

bucket

String

必选

参数解释

存储被规则标识的对象副本的桶名称。

约束限制:

  • 桶的名字需全局唯一,不能与已有的任何桶名称重复,包括其他用户创建的桶。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户在同一个区域多次创建同名桶不会报错,创建的桶属性以第一次请求为准。

默认取值:

storageClass

StorageClassEnum

可选

参数解释

对象的存储类型。

取值范围:

详见StorageClassEnum

默认取值:

deleteData

DeleteDataEnum

可选

参数解释

是否同步删除操作。

取值范围:

详见DeleteDataEnum

默认取值:

DISABLED

表8 StorageClassEnum

常量名

原始值

说明

STANDARD

STANDARD

标准存储。

WARM

WARM

低频访问存储。

COLD

COLD

归档存储。

DEEP_ARCHIVE

DEEP_ARCHIVE

深度归档存储

表9 DeleteDataEnum

常量名

原始值

说明

ENABLED

Enabled

删除同步复制关键字,如果为Enabled,源桶的对象删除操作会复制到目标端。

DISABLED

Disabled

删除同步复制关键字,如果为Disabled,源桶的对象删除操作不会复制到目标端。

返回结果说明

表10 返回结果HeaderResponse(SDK公共响应结果)各项属性说明

参数名称

参数类型

描述

statusCode

int

参数解释:

HTTP状态码。

取值范围:

状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。

完整的状态码列表请参见状态码

默认取值:

responseHeaders

Map<String, Object>

参数解释:

HTTP响应消息头列表,由多个元组构成。元组中String代表响应消息头的名称,Object代表响应消息头的值。

默认取值:

代码示例

本示例用于设置桶的跨区域复制配置。
import com.obs.services.ObsClient;
import com.obs.services.ObsConfiguration;
import com.obs.services.exception.ObsException;
import com.obs.services.model.DeleteDataEnum;
import com.obs.services.model.HeaderResponse;
import com.obs.services.model.HistoricalObjectReplicationEnum;
import com.obs.services.model.ReplicationConfiguration;
import com.obs.services.model.RuleStatusEnum;
import com.obs.services.model.SetBucketReplicationRequest;
import com.obs.services.model.StorageClassEnum;
import java.util.ArrayList;
import java.util.Map;
public class SetBucketReplication {
    public static void main(String[] args) {
        // 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
        // 您可以登录访问管理控制台获取访问密钥AK/SK
        String ak = System.getenv("ACCESS_KEY_ID");
        String sk = System.getenv("SECRET_ACCESS_KEY_ID");
        // 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
        // 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。
        String securityToken = System.getenv("SECURITY_TOKEN");
        // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
        // 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
        String endPoint = System.getenv("ENDPOINT");
        ObsConfiguration obsConfiguration = new ObsConfiguration();
        obsConfiguration.setEndPoint(endPoint);
        ObsClient obsClient = new ObsClient(ak, sk, securityToken, obsConfiguration);
        // 创建ObsClient实例
        try {
            // Step 1: Define the source and destination buckets
            String sourceBucket = "example-source-bucket";
            String destinationBucket = "example-destination-bucket";
            // Step 2: Create and configure replication rule
            ReplicationConfiguration replicationConfiguration = new ReplicationConfiguration();
            replicationConfiguration.setAgency("testAgency");
            ArrayList<ReplicationConfiguration.Rule> rules = new ArrayList<>();
            ReplicationConfiguration.Rule rule = new ReplicationConfiguration.Rule();
            rule.setId("rule-delete-data");
            rule.setStatus(RuleStatusEnum.ENABLED);
            rule.setPrefix("key-prefix");
            rule.setHistoricalObjectReplication(HistoricalObjectReplicationEnum.ENABLED);
            ReplicationConfiguration.Destination destination = new ReplicationConfiguration.Destination();
            destination.setBucket(destinationBucket);
            destination.setObjectStorageClass(StorageClassEnum.STANDARD);
            destination.setDeleteData(DeleteDataEnum.ENABLED);
            rule.setDestination(destination);
            rules.add(rule);
            replicationConfiguration.setRules(rules);
            SetBucketReplicationRequest request = new SetBucketReplicationRequest(sourceBucket, replicationConfiguration);
            // Step 3: Set replication with DeleteDataEnum ENABLED
            HeaderResponse response = obsClient.setBucketReplication(request.getBucketName(), request.getReplicationConfiguration());
            System.out.println("SetBucketReplication successfully");
        } catch (ObsException e) {
            System.out.println("SetBucketReplication failed");
            System.out.println("HTTP Code: " + e.getResponseCode());
            System.out.println("Error Code:" + e.getErrorCode());
            System.out.println("Error Message: " + e.getErrorMessage());
            System.out.println("Request ID:" + e.getErrorRequestId());
            System.out.println("Host ID:" + e.getErrorHostId());
            Map<String, String> headers = e.getResponseHeaders();// 遍历Map的entry,打印所有报错相关头域
            if(headers != null){
                for (Map.Entry<String, String> header : headers.entrySet()) {
                    System.out.println(header.getKey()+":"+header.getValue());
                }
            }
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("SetBucketReplication failed");
            // 其他异常信息打印
            e.printStackTrace();
        }
    }
}

相关文档