本文介绍如何通过Java SDK V2创建、查看、更新和删除存储空间(Bucket)的元数据表配置,包括日志表(Journal Table)配置和清单表(Inventory Table)配置。
功能说明
元数据管理(Metadata)为存储空间(Bucket)提供元数据表配置能力,包含以下两类配置:
日志表配置(JournalTableConfiguration):通过
RecordExpiration控制日志记录的开启状态(Expiration取值ENABLED或DISABLED)及记录保留天数(Days)。清单表配置(InventoryTableConfiguration):通过
ConfigurationState控制清单表的启用状态(取值ENABLED或DISABLED),并可通过EncryptionConfiguration指定加密算法(SseAlgorithm)。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou为例,其他地域请根据实际情况替换。本文以从环境变量读取访问凭证为例。使用前请确保已配置访问凭证(AccessKey)。
请确保您拥有对目标Bucket执行元数据表配置操作的权限。Bucket所有者默认拥有此类权限,如果您无此类权限,请先向Bucket所有者申请对应操作的权限。
您也可以通过OSS控制台开启、修改或关闭元数据管理功能。
示例代码
创建元数据表配置
以下代码用于为某个Bucket创建元数据表配置(同时设置日志表和清单表):
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class CreateBucketMetadataConfigurationSample {
public static void main(String[] args) {
String region = "cn-hangzhou";
String bucket = "examplebucket";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
OSSClientBuilder clientBuilder = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region);
try (OSSClient client = clientBuilder.build()) {
// 构建日志表和清单表的元数据配置
MetadataConfiguration configuration = MetadataConfiguration.newBuilder()
.journalTableConfiguration(JournalTableConfiguration.newBuilder()
.recordExpiration(MetadataTableRecordExpiration.newBuilder()
.expiration("ENABLED")
.days(30)
.build())
.encryptionConfiguration(MetadataTableEncryptionConfiguration.newBuilder()
.sseAlgorithm("AES256")
.build())
.build())
.inventoryTableConfiguration(InventoryTableConfiguration.newBuilder()
.configurationState("ENABLED")
.encryptionConfiguration(MetadataTableEncryptionConfiguration.newBuilder()
.sseAlgorithm("AES256")
.build())
.build())
.build();
CreateBucketMetadataConfigurationResult result = client.createBucketMetadataConfiguration(
CreateBucketMetadataConfigurationRequest.newBuilder()
.bucket(bucket)
.metadataConfiguration(configuration)
.build());
System.out.printf("Status code:%d, request id:%s\n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:\n%s", e);
}
}
}查看元数据表配置
以下代码用于查看某个Bucket的元数据表配置:
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class GetBucketMetadataConfigurationSample {
public static void main(String[] args) {
String region = "cn-hangzhou";
String bucket = "examplebucket";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
OSSClientBuilder clientBuilder = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region);
try (OSSClient client = clientBuilder.build()) {
GetBucketMetadataConfigurationResult result = client.getBucketMetadataConfiguration(
GetBucketMetadataConfigurationRequest.newBuilder()
.bucket(bucket)
.build());
MetadataConfigurationResult configuration = result.metadataConfigurationResult();
System.out.printf("Status code:%d, request id:%s\n",
result.statusCode(), result.requestId());
System.out.printf("Table bucket ARN:%s, journal status:%s, inventory state:%s\n",
configuration.destinationResult().tableBucketArn(),
configuration.journalTableConfigurationResult().tableStatus(),
configuration.inventoryTableConfigurationResult().configurationState());
} catch (Exception e) {
System.out.printf("error:\n%s", e);
}
}
}更新清单表(Inventory Table)配置
以下代码用于更新某个Bucket的清单表配置:
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class UpdateBucketMetadataInventoryTableConfigurationSample {
public static void main(String[] args) {
String region = "cn-hangzhou";
String bucket = "examplebucket";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
OSSClientBuilder clientBuilder = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region);
try (OSSClient client = clientBuilder.build()) {
// 开启或关闭清单表
InventoryTableConfiguration configuration = InventoryTableConfiguration.newBuilder()
.configurationState("ENABLED")
.build();
UpdateBucketMetadataInventoryTableConfigurationResult result =
client.updateBucketMetadataInventoryTableConfiguration(
UpdateBucketMetadataInventoryTableConfigurationRequest.newBuilder()
.bucket(bucket)
.inventoryTableConfiguration(configuration)
.build());
System.out.printf("Status code:%d, request id:%s\n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:\n%s", e);
}
}
}更新日志表(Journal Table)配置
以下代码用于更新某个Bucket的日志表配置:
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class UpdateBucketMetadataJournalTableConfigurationSample {
public static void main(String[] args) {
String region = "cn-hangzhou";
String bucket = "examplebucket";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
OSSClientBuilder clientBuilder = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region);
try (OSSClient client = clientBuilder.build()) {
// 更新日志表的过期配置
JournalTableConfiguration configuration = JournalTableConfiguration.newBuilder()
.recordExpiration(MetadataTableRecordExpiration.newBuilder()
.expiration("ENABLED")
.days(30)
.build())
.build();
UpdateBucketMetadataJournalTableConfigurationResult result =
client.updateBucketMetadataJournalTableConfiguration(
UpdateBucketMetadataJournalTableConfigurationRequest.newBuilder()
.bucket(bucket)
.journalTableConfiguration(configuration)
.build());
System.out.printf("Status code:%d, request id:%s\n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:\n%s", e);
}
}
}删除元数据表配置
以下代码用于删除某个Bucket的元数据表配置:
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.*;
public class DeleteBucketMetadataConfigurationSample {
public static void main(String[] args) {
String region = "cn-hangzhou";
String bucket = "examplebucket";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
OSSClientBuilder clientBuilder = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region);
try (OSSClient client = clientBuilder.build()) {
DeleteBucketMetadataConfigurationResult result = client.deleteBucketMetadataConfiguration(
DeleteBucketMetadataConfigurationRequest.newBuilder()
.bucket(bucket)
.build());
System.out.printf("Status code:%d, request id:%s\n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:\n%s", e);
}
}
}相关文档
同步示例代码,请参见 CreateBucketMetadataConfiguration.java、GetBucketMetadataConfiguration.java、DeleteBucketMetadataConfiguration.java、UpdateBucketMetadataInventoryTableConfiguration.java、UpdateBucketMetadataJournalTableConfiguration.java。
异步示例代码,请参见 CreateBucketMetadataConfigurationAsync.java、GetBucketMetadataConfigurationAsync.java、DeleteBucketMetadataConfigurationAsync.java、UpdateBucketMetadataInventoryTableConfigurationAsync.java、UpdateBucketMetadataJournalTableConfigurationAsync.java。