本文档介绍如何添加、查看、列举和删除存储空间(Bucket)的清单(Inventory)配置。

注意事项

  • 请确保您拥有调用添加、查看、列举和删除存储空间清单配置的权限。Bucket所有者默认拥有此类权限,如果您无此类权限,请先向Bucket所有者申请对应操作的权限。
  • 单个Bucket最多只能有1000条清单配置。
  • 配置清单的源Bucket与存放导出的清单文件所在的目标Bucket必须位于同一个Region。

添加清单配置

以下代码用于为某个Bucket添加清单配置:

// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写待添加清单配置的Bucket名称。
String bucketName = "yourBucketName";
// 填写存放清单结果的Bucket名称。
String destBucketName ="yourDestinationBucketName";
// 填写Bucket所有者授予的账户ID。
String accountId ="yourDestinationBucketAccountId";
// 填写具有读取源Bucket所有文件和向目标Bucket写入文件权限的角色名称。
String roleArn ="yourDestinationBucketRoleArn";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建清单配置。
InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();

// 设置清单规则名称。
String inventoryId = "testid";
inventoryConfiguration.setInventoryId(inventoryId);

// 设置清单中包含的Object属性。
List<String> fields = new ArrayList<String>();
fields.add(InventoryOptionalFields.Size);
fields.add(InventoryOptionalFields.LastModifiedDate);
fields.add(InventoryOptionalFields.IsMultipartUploaded);
fields.add(InventoryOptionalFields.StorageClass);
fields.add(InventoryOptionalFields.ETag);
fields.add(InventoryOptionalFields.EncryptionStatus);
inventoryConfiguration.setOptionalFields(fields);

// 设置清单的生成计划,以下示例为每周一次。其中,Weekly对应每周一次,Daily对应每天一次。
inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));

// 设置清单中包含的object的版本为当前版本。如果设置为InventoryIncludedObjectVersions.All则表示object的所有版本,在版本控制状态下生效。
inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);

// 清单配置是否启用的标识,取值为true或false。设置为true,表示启用清单配置。
inventoryConfiguration.setEnabled(true);

// 设置清单筛选规则,指定筛选Object的前缀。
InventoryFilter inventoryFilter = new InventoryFilter().withPrefix("obj-prefix");
inventoryConfiguration.setInventoryFilter(inventoryFilter);

// 创建存放清单结果的目标Bucket配置。
InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
// 设置存放清单结果的存储路径前缀。
ossInvDest.setPrefix("destination-prefix");
// 设置清单格式。
ossInvDest.setFormat(InventoryFormat.CSV);
// 目标Bucket的用户accountId。
ossInvDest.setAccountId(accountId);
// 目标Bucket的roleArn。
ossInvDest.setRoleArn(roleArn);
// 目标Bucket的名称。
ossInvDest.setBucket(destBucketName);

// 如果需要使用KMS加密清单,请参考如下设置。
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// InventoryServerSideEncryptionKMS serverSideKmsEncryption = new InventoryServerSideEncryptionKMS().withKeyId("test-kms-id");
// inventoryEncryption.setServerSideKmsEncryption(serverSideKmsEncryption);
// ossInvDest.setEncryption(inventoryEncryption);

// 如果需要使用OSS服务端加密清单,请参考如下设置。
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
// ossInvDest.setEncryption(inventoryEncryption);

// 设置清单的目的地。
InventoryDestination destination = new InventoryDestination();
destination.setOssBucketDestination(ossInvDest);
inventoryConfiguration.setDestination(destination);

// 上传清单配置。
ossClient.setBucketInventoryConfiguration(bucketName, inventoryConfiguration);

// 关闭ossClient。
ossClient.shutdown();

查看清单配置

以下代码用于查看某个Bucket的清单配置:

// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写待查看清单配置的Bucket名称。
String bucketName = "yourBucketName";
// 指定清单规则名称。
String inventoryId = "yourInventoryConfigurationId";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 查看指定清单规则的配置信息。
GetBucketInventoryConfigurationRequest request = new GetBucketInventoryConfigurationRequest(bucketName, inventoryId);
GetBucketInventoryConfigurationResult getResult = ossClient.getBucketInventoryConfiguration(request);

// 打印清单配置信息。
InventoryConfiguration config = getResult.getInventoryConfiguration();
System.out.println("=====Inventory configuration=====");
System.out.println("inventoryId:" + config.getInventoryId());
System.out.println("isenabled:" + config.isEnabled());
System.out.println("includedVersions:" + config.getIncludedObjectVersions());
System.out.println("schdule:" + config.getSchedule().getFrequency());
if (config.getInventoryFilter().getPrefix() != null) {
    System.out.println("filter, prefix:" + config.getInventoryFilter().getPrefix());
}

List<String> fields = config.getOptionalFields();
for (String field : fields) {
    System.out.println("field:" + field);
}

System.out.println("===bucket destination config===");
InventoryOSSBucketDestination destin = config.getDestination().getOssBucketDestination();
System.out.println("format:" + destin.getFormat());
System.out.println("bucket:" + destin.getBucket());
System.out.println("prefix:" + destin.getPrefix());
System.out.println("accountId:" + destin.getAccountId());
System.out.println("roleArn:" + destin.getRoleArn());
if (destin.getEncryption() != null) {
    if (destin.getEncryption().getServerSideKmsEncryption() != null) {
        System.out.println("server-side kms encryption, key id:" + destin.getEncryption().getServerSideKmsEncryption().getKeyId());
    } else if (destin.getEncryption().getServerSideOssEncryption() != null) {
        System.out.println("server-side oss encryption.");
    }
}

// 关闭ossClient。
ossClient.shutdown();

批量列举清单配置

说明 单次请求最多可获取100条清单配置项内容。若需获取超过100条清单配置项,则需发送多次请求,并保留相应的Token,作为下一次请求的参数。

以下代码用于批量列举某个Bucket的清单配置:

// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写待获取清单配置的Bucket名称。
String bucketName = "yourBucketName";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 列举清单配置项。默认每次最多列举100条结果,如果配置超过100条,结果将会分页返回,通过传入Token方式列举下一页。
String continuationToken = null;
while (true) {
    ListBucketInventoryConfigurationsRequest listRequest = new ListBucketInventoryConfigurationsRequest(bucketName, continuationToken);
    ListBucketInventoryConfigurationsResult result = ossClient.listBucketInventoryConfigurations(listRequest);
    System.out.println("=======List bucket inventory configuration=======");
    System.out.println("istruncated:" + result.isTruncated());
    System.out.println("continuationToken:" + result.getContinuationToken());
    System.out.println("nextContinuationToken:" + result.getNextContinuationToken());
    System.out.println("list size :" + result.getInventoryConfigurationList());
    if (result.getInventoryConfigurationList() != null && !result.getInventoryConfigurationList().isEmpty()) {
        for (InventoryConfiguration config : result.getInventoryConfigurationList()) {
            System.out.println("===Inventory configuration===");
            System.out.println("inventoryId:" + config.getInventoryId());
            System.out.println("isenabled:" + config.isEnabled());
            System.out.println("includedVersions:" + config.getIncludedObjectVersions());
            System.out.println("schdule:" + config.getSchedule().getFrequency());
            if (config.getInventoryFilter().getPrefix() != null) {
                System.out.println("filter, prefix:" + config.getInventoryFilter().getPrefix());
            }

            List<String> fields = config.getOptionalFields();
            for (String field : fields) {
                System.out.println("field:" + field);
            }

            System.out.println("===bucket destination config===");
            InventoryOSSBucketDestination destin = config.getDestination().getOssBucketDestination();
            System.out.println("format:" + destin.getFormat());
            System.out.println("bucket:" + destin.getBucket());
            System.out.println("prefix:" + destin.getPrefix());
            System.out.println("accountId:" + destin.getAccountId());
            System.out.println("roleArn:" + destin.getRoleArn());
            if (destin.getEncryption() != null) {
                if (destin.getEncryption().getServerSideKmsEncryption() != null) {
                    System.out.println("server-side kms encryption key id:" + destin.getEncryption().getServerSideKmsEncryption().getKeyId());
                } else if (destin.getEncryption().getServerSideOssEncryption() != null) {
                    System.out.println("server-side oss encryption.");
                }
            }
        }

        if (result.isTruncated()) {
            continuationToken = result.getNextContinuationToken();
        } else {
            break;
        }
    }

    // 关闭ossClient。
    ossClient.shutdown();
}

删除清单配置

以下代码用于删除某个Bucket的清单配置:

// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写待删除清单配置的Bucket名称。
String bucketName = "yourBucketName";
// 指定待删除的清单规则名称。
String inventoryId = "yourInventoryConfigurationId";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 删除清单配置。
ossClient.deleteBucketInventoryConfiguration(bucketName, inventoryId);

// 关闭ossClient。
ossClient.shutdown(); 

相关文档