AgenticBucket(PHP SDK V2)

更新时间:
复制 MD 格式

本文介绍如何使用OSS PHP SDK V2完成AgenticBucket的创建与管理、泛域名CNAME的绑定与解绑,以及BucketSpace的创建与文件上传。

注意事项

  • 使用AgenticBucket相关功能,您需要安装0.5.0及以上版本的alibabacloud/oss-v2(PHP SDK V2)。

  • 本文示例代码以华东1(杭州)的地域IDcn-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);
}