本文介绍如何使用OSS PHP SDK V2完成AgenticBucket的创建与管理、泛域名CNAME的绑定与解绑,以及BucketSpace的创建与文件上传。
注意事项
使用AgenticBucket相关功能,您需要安装0.5.0及以上版本的
alibabacloud/oss-v2(PHP SDK V2)。本文示例代码以华东1(杭州)的地域ID
cn-hangzhou为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见地域和Endpoint。使用
AlibabaCloud\Oss\V2\Agentic命名空间下的客户端(AgenticBucketClient、BucketSpaceClient)时,必须在配置中同时设置region和accountId。请求中的bucket参数为Bucket名称前缀,SDK会自动将其解析为完整名称:AgenticBucket对应的完整名称为{prefix}-{accountId}-{region}-ab-apsr,BucketSpace对应的完整名称为{prefix}-{accountId}-{region}-bs-apsr。访问BucketSpace有两种方式,可按需选择:一是使用
BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀,SDK自动将其解析为完整名称;二是使用BucketSpaceHelper和标准客户端Oss\Client,先通过其toBucketName方法将名称前缀转换为完整名称,再通过标准客户端访问BucketSpace,此方式下请求中的bucket参数须传入完整名称。使用BucketSpaceHelper时,同样必须在配置中设置region和accountId。CNAME相关操作(创建CnameToken、获取CnameToken、绑定CNAME、列举CNAME、删除CNAME)由标准客户端
Oss\Client提供,请求中的bucket参数须传入AgenticBucket的完整名称,即{prefix}-{accountId}-{region}-ab-apsr。泛域名CNAME相关请求中,
domain或cname参数须传入泛域名基础域(不含*.前缀),且基础域至少包含3段(例如example.com不合法,foo.example.com合法)。绑定泛域名CNAME前,需先为该基础域申请CnameToken并完成域名所有权验证;如果绑定证书,证书须为与*.基础域匹配的通配符证书。关于泛域名CNAME的完整规则,请参见PutCname。
示例代码
创建AgenticBucket
以下代码用于创建AgenticBucket。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\AgenticBucketClient;
use AlibabaCloud\Oss\V2\Agentic\Models;
// 定义命令行参数描述,包括必需的地域、AgenticBucket名称前缀、账号ID以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The name of the agentic bucket.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。AgenticBucketClient会根据地域和账号ID
// 自动将Bucket名称前缀解析为完整名称:{prefix}-{accountId}-{region}-ab-apsr
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化AgenticBucket客户端
$client = new AgenticBucketClient($cfg);
try {
// 创建AgenticBucket,存储类型为Standard,数据容灾类型为LRS
$request = new Models\CreateAgenticBucketRequest(
$bucket,
new Models\CreateAgenticBucketConfiguration('Standard', 'LRS')
);
$result = $client->createAgenticBucket($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}查询AgenticBucket信息
以下代码用于查询指定AgenticBucket的信息。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\AgenticBucketClient;
use AlibabaCloud\Oss\V2\Agentic\Models;
// 定义命令行参数描述,包括必需的地域、AgenticBucket名称前缀、账号ID以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The name of the agentic bucket.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并设置地域和账号ID
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化AgenticBucket客户端
$client = new AgenticBucketClient($cfg);
try {
// 查询指定AgenticBucket的信息
$request = new Models\GetAgenticBucketRequest($bucket);
$result = $client->getAgenticBucket($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
if ($result->agenticBucketInfo !== null) {
printf('bucket name: %s' . PHP_EOL, $result->agenticBucketInfo->name);
}
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}列举AgenticBucket
以下代码用于列举当前账号在指定地域下的所有AgenticBucket。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\AgenticBucketClient;
use AlibabaCloud\Oss\V2\Agentic\ListAgenticBucketsPaginator;
use AlibabaCloud\Oss\V2\Agentic\Models;
// 定义命令行参数描述,包括必需的地域、账号ID以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并设置地域和账号ID
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化AgenticBucket客户端
$client = new AgenticBucketClient($cfg);
try {
// 创建ListAgenticBuckets分页迭代器,列举当前账号在指定地域下的所有AgenticBucket
$paginator = new ListAgenticBucketsPaginator($client);
foreach ($paginator->iterPage(new Models\ListAgenticBucketsRequest()) as $page) {
foreach ($page->agenticBuckets ?? [] as $summary) {
printf('agentic bucket: name: %s, storage class: %s, data redundancy type: %s' . PHP_EOL,
$summary->name, $summary->storageClass, $summary->dataRedundancyType);
}
}
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}删除AgenticBucket
以下代码用于删除指定的AgenticBucket。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\AgenticBucketClient;
use AlibabaCloud\Oss\V2\Agentic\Models;
// 定义命令行参数描述,包括必需的地域、AgenticBucket名称前缀、账号ID以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The name of the agentic bucket.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并设置地域和账号ID
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化AgenticBucket客户端
$client = new AgenticBucketClient($cfg);
try {
// 删除指定的AgenticBucket
$request = new Models\DeleteAgenticBucketRequest($bucket);
$result = $client->deleteAgenticBucket($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}创建CnameToken(泛域名)
以下代码用于为AgenticBucket上的泛域名基础域申请CnameToken。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述,包括必需的地域、账号ID、泛域名基础域以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The prefix of the agentic bucket name.', 'required' => True],
"domain" => ['help' => 'The base domain name of the wildcard domain, without the "*." prefix.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucketPrefix = $options["bucket"];
$domain = $options["domain"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。CNAME相关操作由标准客户端Oss\Client提供,
// 请求中的bucket参数须传入AgenticBucket的完整名称
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化标准OSS客户端
$client = new Oss\Client($cfg);
// AgenticBucket的完整名称为{prefix}-{accountId}-{region}-ab-apsr
$agenticBucket = sprintf('%s-%s-%s-ab-apsr', $bucketPrefix, $accountId, $region);
try {
// 为泛域名基础域申请CnameToken。domain传入不含*.前缀的基础域,
// isWildCard设置为true,表示为泛域名CNAME申请CnameToken
$request = new Oss\Models\CreateCnameTokenRequest(
$agenticBucket,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname($domain, null, true)
)
);
$result = $client->createCnameToken($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
if ($result->cnameToken !== null) {
printf('cname: %s' . PHP_EOL, $result->cnameToken->cname);
printf('token: %s' . PHP_EOL, $result->cnameToken->token);
}
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}获取CnameToken(泛域名)
以下代码用于获取AgenticBucket上泛域名CNAME的CnameToken。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述,包括必需的地域、账号ID、泛域名基础域以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The prefix of the agentic bucket name.', 'required' => True],
"domain" => ['help' => 'The base domain name of the wildcard domain, without the "*." prefix.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucketPrefix = $options["bucket"];
$domain = $options["domain"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。CNAME相关操作由标准客户端Oss\Client提供,
// 请求中的bucket参数须传入AgenticBucket的完整名称
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化标准OSS客户端
$client = new Oss\Client($cfg);
// AgenticBucket的完整名称为{prefix}-{accountId}-{region}-ab-apsr
$agenticBucket = sprintf('%s-%s-%s-ab-apsr', $bucketPrefix, $accountId, $region);
try {
// 获取泛域名基础域的CnameToken。cname传入不含*.前缀的基础域,
// wildcard设置为true,表示获取泛域名CNAME的CnameToken
$request = new Oss\Models\GetCnameTokenRequest($agenticBucket, $domain, null, true);
$result = $client->getCnameToken($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
if ($result->cnameToken !== null) {
printf('cname: %s' . PHP_EOL, $result->cnameToken->cname);
printf('token: %s' . PHP_EOL, $result->cnameToken->token);
}
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}绑定泛域名CNAME
以下代码用于为AgenticBucket绑定泛域名CNAME。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述,包括必需的地域、账号ID、泛域名基础域以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The prefix of the agentic bucket name.', 'required' => True],
"domain" => ['help' => 'The base domain name of the wildcard domain, without the "*." prefix.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucketPrefix = $options["bucket"];
$domain = $options["domain"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。CNAME相关操作由标准客户端Oss\Client提供,
// 请求中的bucket参数须传入AgenticBucket的完整名称
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化标准OSS客户端
$client = new Oss\Client($cfg);
// AgenticBucket的完整名称为{prefix}-{accountId}-{region}-ab-apsr
$agenticBucket = sprintf('%s-%s-%s-ab-apsr', $bucketPrefix, $accountId, $region);
try {
// 为AgenticBucket绑定泛域名CNAME。domain传入不含*.前缀的基础域,
// isWildCard设置为true,表示绑定泛域名CNAME
$request = new Oss\Models\PutCnameRequest(
$agenticBucket,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname($domain, null, true)
)
);
$result = $client->putCname($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}列举CNAME记录
以下代码用于列举AgenticBucket下的CNAME记录。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述,包括必需的地域、账号ID以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The prefix of the agentic bucket name.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucketPrefix = $options["bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并初始化标准OSS客户端
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
// AgenticBucket的完整名称为{prefix}-{accountId}-{region}-ab-apsr
$agenticBucket = sprintf('%s-%s-%s-ab-apsr', $bucketPrefix, $accountId, $region);
try {
// 列举AgenticBucket下的CNAME记录
$request = new Oss\Models\ListCnameRequest($agenticBucket);
$result = $client->listCname($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
foreach ($result->cnames ?? [] as $info) {
printf('domain: %s, status: %s' . PHP_EOL, $info->domain, $info->status);
}
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}删除泛域名CNAME
以下代码用于删除AgenticBucket上的泛域名CNAME。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定义命令行参数描述,包括必需的地域、账号ID、泛域名基础域以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The prefix of the agentic bucket name.', 'required' => True],
"domain" => ['help' => 'The base domain name of the wildcard domain, without the "*." prefix.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucketPrefix = $options["bucket"];
$domain = $options["domain"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。CNAME相关操作由标准客户端Oss\Client提供,
// 请求中的bucket参数须传入AgenticBucket的完整名称
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 使用上述配置初始化标准OSS客户端
$client = new Oss\Client($cfg);
// AgenticBucket的完整名称为{prefix}-{accountId}-{region}-ab-apsr
$agenticBucket = sprintf('%s-%s-%s-ab-apsr', $bucketPrefix, $accountId, $region);
try {
// 删除AgenticBucket上的泛域名CNAME。domain传入不含*.前缀的基础域,
// isWildCard设置为true,表示删除泛域名CNAME
$request = new Oss\Models\DeleteCnameRequest(
$agenticBucket,
new Oss\Models\BucketCnameConfiguration(
new Oss\Models\Cname($domain, null, true)
)
);
$result = $client->deleteCname($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}创建BucketSpace
以下代码用于在指定的AgenticBucket下创建BucketSpace。SDK提供两种访问BucketSpace的方式,以下示例分别演示,您可按需选择。
方式一:使用BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\BucketSpaceClient;
// 定义命令行参数描述,包括必需的地域、BucketSpace名称前缀、账号ID、
// 所属AgenticBucket名称前缀以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The bucket space prefix name.', 'required' => True],
"agentic-bucket" => ['help' => 'The agentic bucket that the bucket space belongs to.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
$agenticBucket = $options["agentic-bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。BucketSpaceClient会根据地域和账号ID
// 自动将BucketSpace名称前缀解析为完整名称:{prefix}-{accountId}-{region}-bs-apsr
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作
$client = BucketSpaceClient::newClient($cfg);
try {
// 在指定的AgenticBucket下创建BucketSpace。PutBucketRequest的bucket参数
// 为BucketSpace名称前缀,agenticBucket参数为所属AgenticBucket的完整名称
$request = new Oss\Models\PutBucketRequest($bucket);
$request->agenticBucket = sprintf('%s-%s-%s-ab-apsr', $agenticBucket, $accountId, $region);
$result = $client->putBucket($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}方式二:使用BucketSpaceHelper和标准客户端Oss\Client,请求中的bucket参数传入转换后的BucketSpace完整名称。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\BucketSpaceHelper;
// 定义命令行参数描述,与方式一相同
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The bucket space prefix name.', 'required' => True],
"agentic-bucket" => ['help' => 'The agentic bucket that the bucket space belongs to.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
$agenticBucket = $options["agentic-bucket"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并初始化标准OSS客户端
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
// 创建BucketSpaceHelper。该Helper根据配置中的账号ID和地域,
// 将BucketSpace名称前缀转换为完整名称{prefix}-{accountId}-{region}-bs-apsr
$helper = new BucketSpaceHelper($cfg);
try {
// 在指定的AgenticBucket下创建BucketSpace。PutBucketRequest的bucket参数
// 为helper转换后的BucketSpace完整名称,agenticBucket参数为所属AgenticBucket的完整名称
$request = new Oss\Models\PutBucketRequest($helper->toBucketName($bucket));
$request->agenticBucket = sprintf('%s-%s-%s-ab-apsr', $agenticBucket, $accountId, $region);
$result = $client->putBucket($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}向BucketSpace上传文件
以下代码用于向指定的BucketSpace上传文件(Object)。以下示例分别演示两种访问方式。
方式一:使用BucketSpaceClient,请求中的bucket参数传入BucketSpace名称前缀。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\BucketSpaceClient;
// 定义命令行参数描述,包括必需的地域、BucketSpace名称前缀、账号ID、
// 文件名称以及可选的Endpoint
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The bucket space prefix name.', 'required' => True],
"key" => ['help' => 'The name of the object.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
$key = $options["key"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象。BucketSpaceClient会根据地域和账号ID
// 自动将BucketSpace名称前缀解析为完整名称:{prefix}-{accountId}-{region}-bs-apsr
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
$cfg->setAccountId($accountId);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 创建BucketSpace客户端。该客户端复用标准OSS Bucket/Object操作
$client = BucketSpaceClient::newClient($cfg);
try {
// 向指定的BucketSpace上传文件
$request = new Oss\Models\PutObjectRequest($bucket, $key);
$request->body = Oss\Utils::streamFor('Hello OSS');
$result = $client->putObject($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL . 'etag: %s' . PHP_EOL,
$result->statusCode,
$result->requestId,
$result->etag
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}方式二:使用BucketSpaceHelper和标准客户端Oss\Client,请求中的bucket参数传入转换后的BucketSpace完整名称。
<?php
// 引入自动加载文件,加载依赖库
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Agentic\BucketSpaceHelper;
// 定义命令行参数描述,与方式一相同
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True],
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False],
"account-id" => ['help' => 'The ID of the Alibaba Cloud account that owns the bucket.', 'required' => True],
"bucket" => ['help' => 'The bucket space prefix name.', 'required' => True],
"key" => ['help' => 'The name of the object.', 'required' => True],
];
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help";
exit(1);
}
}
$region = $options["region"];
$accountId = $options["account-id"];
$bucket = $options["bucket"];
$key = $options["key"];
// 从环境变量中加载访问凭证信息,用于身份验证
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK默认配置创建配置对象,并初始化标准OSS客户端
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
// 创建BucketSpaceHelper,用于将BucketSpace名称前缀转换为完整名称
// {prefix}-{accountId}-{region}-bs-apsr
$helper = new BucketSpaceHelper($cfg);
try {
// 向指定的BucketSpace上传文件。PutObjectRequest的bucket参数
// 为helper转换后的BucketSpace完整名称
$request = new Oss\Models\PutObjectRequest($helper->toBucketName($bucket), $key);
$request->body = Oss\Utils::streamFor('Hello OSS');
$result = $client->putObject($request);
printf(
'status code: %d' . PHP_EOL . 'request id: %s' . PHP_EOL . 'etag: %s' . PHP_EOL,
$result->statusCode,
$result->requestId,
$result->etag
);
} catch (\Throwable $e) {
printf("error: %s" . PHP_EOL, $e->getMessage());
exit(1);
}相关文档
关于创建AgenticBucket的完整示例代码,请参见AgenticCreateBucket.php。
关于查询AgenticBucket信息的完整示例代码,请参见AgenticGetBucket.php。
关于列举AgenticBucket的完整示例代码,请参见AgenticListBuckets.php。
关于删除AgenticBucket的完整示例代码,请参见AgenticDeleteBucket.php。
关于创建域名所有权验证所需CnameToken的完整示例代码,请参见CreateCnameToken.php。
关于获取CnameToken的完整示例代码,请参见GetCnameToken.php。
关于添加CNAME记录的完整示例代码,请参见PutCname.php。
关于查看CNAME记录的完整示例代码,请参见ListCname.php。
关于删除CNAME记录的完整示例代码,请参见DeleteCname.php。
关于创建BucketSpace的完整示例代码,请参见BucketSpacePutBucket.php。
关于向BucketSpace上传文件的完整示例代码,请参见BucketSpacePutObject.php。
关于CNAME相关接口的详细参数说明,请参见CreateCnameToken、PutCname、ListCname、GetCnameToken和DeleteCname。