本文介绍如何使用OSS Java SDK V2完成Agentic Bucket的创建与管理、泛域名CNAME的绑定与解绑,以及Bucket Space的创建与文件上传。
注意事项
使用Agentic Bucket相关功能,您需要安装0.6.0及以上版本的
alibabacloud-oss-v2(Java SDK V2)。本文示例代码以华东1(杭州)的地域ID
cn-hangzhou为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见地域和Endpoint。使用
OSSAgenticBucketClient或BucketSpaceClient时,必须在客户端构建器中同时设置region和accountId。请求中的bucket参数为Bucket名称前缀,SDK会自动将其解析为完整名称:Agentic Bucket对应的完整名称为{prefix}-{accountId}-{region}-ab-apsr,BucketSpace对应的完整名称为{prefix}-{accountId}-{region}-bs-apsr。访问BucketSpace有两种方式,可按需选择:一是使用
BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀,SDK自动将其解析为完整名称;二是使用BucketSpaceHelper和标准客户端OSSClient,先通过其toBucketName方法将名称前缀转换为完整名称,再通过标准客户端访问BucketSpace,此方式下请求中的bucket参数须传入完整名称。使用BucketSpaceHelper时,同样必须提供accountId和region。CNAME相关操作(创建CnameToken、获取CnameToken、绑定CNAME、列举CNAME、删除CNAME)由标准客户端
OSSClient提供,请求中的bucket参数须传入Agentic Bucket的完整名称,即{prefix}-{accountId}-{region}-ab-apsr。泛域名CNAME相关请求中,
domain或cname参数须传入泛域名基础域(不含*.前缀),且基础域至少包含3段(例如example.com不合法,foo.example.com合法)。绑定泛域名CNAME前,需先为该基础域申请CnameToken并完成域名所有权验证;如果绑定证书,证书须为与*.基础域匹配的通配符证书。关于泛域名CNAME的完整规则,请参见PutCname。
示例代码
创建Agentic Bucket
以下代码用于创建Agentic Bucket。
import com.aliyun.sdk.service.oss2.agentic.OSSAgenticBucketClient;
import com.aliyun.sdk.service.oss2.agentic.models.*;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
public class CreateAgenticBucketSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucket = "my-agentic";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSAgenticBucketClient client = OSSAgenticBucketClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build()) {
CreateAgenticBucketResult result = client.createAgenticBucket(CreateAgenticBucketRequest.newBuilder()
.bucket(bucket)
.createAgenticBucketConfiguration(CreateAgenticBucketConfiguration.newBuilder()
.storageClass("Standard")
.dataRedundancyType("LRS")
.build())
.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);
}
}
}查询Agentic Bucket信息
以下代码用于查询指定Agentic Bucket的信息。
import com.aliyun.sdk.service.oss2.agentic.OSSAgenticBucketClient;
import com.aliyun.sdk.service.oss2.agentic.models.*;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
public class GetAgenticBucketSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucket = "my-agentic";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSAgenticBucketClient client = OSSAgenticBucketClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build()) {
GetAgenticBucketResult result = client.getAgenticBucket(GetAgenticBucketRequest.newBuilder()
.bucket(bucket)
.build());
AgenticBucketInfo info = result.agenticBucketInfo();
if (info != null) {
System.out.printf("agentic bucket: name:%s, region:%s, storage class:%s, status:%s, create time:%s%n",
info.name(), info.region(), info.storageClass(), info.status(), info.createTime());
}
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}列举Agentic Bucket
以下代码用于列举当前账号在指定地域下的所有Agentic Bucket。
import com.aliyun.sdk.service.oss2.agentic.OSSAgenticBucketClient;
import com.aliyun.sdk.service.oss2.agentic.models.*;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
public class ListAgenticBucketsSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSAgenticBucketClient client = OSSAgenticBucketClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build()) {
ListAgenticBucketsIterable paginator = client.listAgenticBucketsPaginator(
ListAgenticBucketsRequest.newBuilder()
.build());
for (ListAgenticBucketsResult result : paginator) {
if (result.agenticBuckets() == null) {
continue;
}
for (AgenticBucketSummary info : result.agenticBuckets()) {
System.out.printf("agentic bucket: name:%s, storage class:%s, data redundancy type:%s, create time:%s%n",
info.name(), info.storageClass(), info.dataRedundancyType(), info.createTime());
}
}
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}删除Agentic Bucket
以下代码用于删除指定的Agentic Bucket。
import com.aliyun.sdk.service.oss2.agentic.OSSAgenticBucketClient;
import com.aliyun.sdk.service.oss2.agentic.models.*;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
public class DeleteAgenticBucketSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucket = "my-agentic";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSAgenticBucketClient client = OSSAgenticBucketClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build()) {
DeleteAgenticBucketResult result = client.deleteAgenticBucket(DeleteAgenticBucketRequest.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);
}
}
}创建CnameToken(泛域名)
以下代码用于为Agentic Bucket上的泛域名基础域申请CnameToken。
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 CreateCnameTokenSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketPrefix = "my-agentic";
String domain = "foo.example.com";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
String bucket = String.format("%s-%s-%s-ab-apsr", bucketPrefix, accountId, region);
Cname cname = Cname.newBuilder()
.domain(domain)
.isWildCard(true)
.build();
CreateCnameTokenRequest request = CreateCnameTokenRequest.newBuilder()
.bucket(bucket)
.bucketCnameConfiguration(BucketCnameConfiguration.newBuilder()
.cname(cname)
.build())
.build();
CreateCnameTokenResult result = client.createCnameToken(request);
System.out.printf("status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("bucket:%s%n", result.cnameToken().bucket());
System.out.printf("cname:%s%n", result.cnameToken().cname());
System.out.printf("token:%s%n", result.cnameToken().token());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}获取CnameToken(泛域名)
以下代码用于获取AgenticBucket上泛域名CNAME的CnameToken。
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 GetCnameTokenSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketPrefix = "my-agentic";
String domain = "foo.example.com";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
String bucket = String.format("%s-%s-%s-ab-apsr", bucketPrefix, accountId, region);
GetCnameTokenRequest request = GetCnameTokenRequest.newBuilder()
.bucket(bucket)
.cname(domain)
.wildcard(true)
.build();
GetCnameTokenResult result = client.getCnameToken(request);
System.out.printf("status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
System.out.printf("cname:%s%n", result.cnameToken().cname());
System.out.printf("token:%s%n", result.cnameToken().token());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}绑定泛域名CNAME
以下代码用于为Agentic Bucket绑定泛域名CNAME。
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 PutCnameSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketPrefix = "my-agentic";
String domain = "foo.example.com";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
String bucket = String.format("%s-%s-%s-ab-apsr", bucketPrefix, accountId, region);
Cname cname = Cname.newBuilder()
.domain(domain)
.isWildCard(true)
.build();
PutCnameRequest request = PutCnameRequest.newBuilder()
.bucket(bucket)
.bucketCnameConfiguration(BucketCnameConfiguration.newBuilder()
.cname(cname)
.build())
.build();
PutCnameResult result = client.putCname(request);
System.out.printf("status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}列举CNAME记录
以下代码用于列举AgenticBucket下的CNAME记录。
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.*;
import java.util.List;
public class ListCnameSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketPrefix = "my-agentic";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
String bucket = String.format("%s-%s-%s-ab-apsr", bucketPrefix, accountId, region);
ListCnameResult result = client.listCname(ListCnameRequest.newBuilder()
.bucket(bucket)
.build());
System.out.printf("status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
List<CnameInfo> cnames = result.cnames();
if (cnames != null) {
for (CnameInfo info : cnames) {
System.out.printf("domain:%s, status:%s, last modified time:%s%n",
info.domain(), info.status(), info.lastModified());
}
}
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}删除泛域名CNAME
以下代码用于删除Agentic Bucket上的泛域名CNAME。
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 DeleteCnameSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketPrefix = "my-agentic";
String domain = "foo.example.com";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
String bucket = String.format("%s-%s-%s-ab-apsr", bucketPrefix, accountId, region);
Cname cname = Cname.newBuilder()
.domain(domain)
.isWildCard(true)
.build();
DeleteCnameRequest request = DeleteCnameRequest.newBuilder()
.bucket(bucket)
.bucketCnameConfiguration(BucketCnameConfiguration.newBuilder()
.cname(cname)
.build())
.build();
DeleteCnameResult result = client.deleteCname(request);
System.out.printf("status code:%d, request id:%s%n",
result.statusCode(), result.requestId());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}创建BucketSpace
以下代码用于在指定的AgenticBucket下创建BucketSpace。SDK提供两种访问BucketSpace的方式,以下示例分别演示,您可按需选择。
方式一:使用BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀。
import com.aliyun.sdk.service.oss2.ClientConfiguration;
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.agentic.BucketSpaceClient;
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 BucketSpacePutBucketSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String agenticBucketPrefix = "my-agentic";
String bucketSpacePrefix = "my-space";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = BucketSpaceClient.create(ClientConfiguration.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build())) {
PutBucketResult result = client.putBucket(PutBucketRequest.newBuilder()
.bucket(bucketSpacePrefix)
.agenticBucket(String.format("%s-%s-%s-ab-apsr", agenticBucketPrefix, accountId, region))
.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);
}
}
}方式二:使用BucketSpaceHelper和标准客户端OSSClient,请求中的bucket参数传入转换后的BucketSpace完整名称。
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.agentic.BucketSpaceHelper;
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 BucketSpacePutBucketWithHelperSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String agenticBucketPrefix = "my-agentic";
String bucketSpacePrefix = "my-space";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
BucketSpaceHelper helper = new BucketSpaceHelper(accountId, region);
PutBucketResult result = client.putBucket(PutBucketRequest.newBuilder()
.bucket(helper.toBucketName(bucketSpacePrefix))
.agenticBucket(String.format("%s-%s-%s-ab-apsr", agenticBucketPrefix, accountId, region))
.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);
}
}
}向BucketSpace上传文件
以下代码用于向指定的BucketSpace上传文件(Object)。以下示例分别演示两种访问方式。
方式一:使用BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀。
import com.aliyun.sdk.service.oss2.ClientConfiguration;
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.agentic.BucketSpaceClient;
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 BucketSpacePutObjectSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketSpacePrefix = "my-space";
String key = "exampleobject";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = BucketSpaceClient.create(ClientConfiguration.newBuilder()
.credentialsProvider(provider)
.region(region)
.accountId(accountId)
.build())) {
PutObjectResult result = client.putObject(PutObjectRequest.newBuilder()
.bucket(bucketSpacePrefix)
.key(key)
.body(BinaryData.fromString("Hello OSS"))
.build());
System.out.printf("status code:%d, request id:%s, eTag:%s%n",
result.statusCode(), result.requestId(), result.eTag());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}方式二:使用BucketSpaceHelper和标准客户端OSSClient,请求中的bucket参数传入转换后的BucketSpace完整名称。
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.agentic.BucketSpaceHelper;
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 BucketSpacePutObjectWithHelperSample {
public static void main(String[] args) throws Exception {
String region = "cn-hangzhou";
String accountId = "1234567890123456";
String bucketSpacePrefix = "my-space";
String key = "exampleobject";
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region(region)
.build()) {
BucketSpaceHelper helper = new BucketSpaceHelper(accountId, region);
PutObjectResult result = client.putObject(PutObjectRequest.newBuilder()
.bucket(helper.toBucketName(bucketSpacePrefix))
.key(key)
.body(BinaryData.fromString("Hello OSS"))
.build());
System.out.printf("status code:%d, request id:%s, eTag:%s%n",
result.statusCode(), result.requestId(), result.eTag());
} catch (Exception e) {
System.out.printf("error:%n%s", e);
}
}
}相关文档
关于创建Agentic Bucket的完整示例代码,请参见CreateAgentic Bucket.java。
关于查询Agentic Bucket信息的完整示例代码,请参见GetAgenticBucket.java。
关于列举Agentic Bucket的完整示例代码,请参见ListAgenticBuckets.java。
关于删除Agentic Bucket的完整示例代码,请参见DeleteAgenticBucket.java。
关于创建域名所有权验证所需CnameToken的完整示例代码,请参见CreateCnameToken.java。
关于获取CnameToken的完整示例代码,请参见GetCnameToken.java。
关于添加CNAME记录的完整示例代码,请参见PutCname.java。
关于查看CNAME记录的完整示例代码,请参见ListCname.java。
关于删除CNAME记录的完整示例代码,请参见DeleteCname.java。
关于创建BucketSpace的完整示例代码,请参见BucketSpacePutBucket.java。
关于向BucketSpace上传文件的完整示例代码,请参见BucketSpacePutObject.java。
关于CNAME相关接口的详细参数说明,请参见CreateCnameToken、PutCname、ListCname、GetCnameToken和DeleteCname。