更新时间:2023-11-08 GMT+08:00
分享

OBS客户端通用示例

开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。

调用ObsClient的相关接口均需要传入请求数组(associative array类型)作为输入。对于桶操作接口,请求数组中固定包含Bucket用于指定桶名(ObsClient->listBuckets除外);对于对象操作接口,请求数组中固定包含Bucket和Key分别用于指定桶名与对象名。OBS客户端提供同步调用和异步调用两种方式,具体示例如下:

同步调用方式

同步调用方式下如果抛出异常,表明操作失败;反之,则表明操作成功。示例代码如下:

// 引入依赖库
require 'vendor/autoload.php';
// 使用源码安装时引入SDK代码库
// require 'obs-autoloader.php';
// 声明命名空间
use Obs\ObsClient;
// 创建ObsClient实例
$obsClient = new ObsClient([
      //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
      //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
      'key' => getenv('ACCESS_KEY_ID'),
      'secret' => getenv('SECRET_ACCESS_KEY'),
      'endpoint' => 'https://your-endpoint',
]);

// 构造桶操作请求参数
$requestParam1 = [ 
       'Bucket' => 'bucketname' 
       // 其他字段
];

try{
       // 同步方式调用桶操作接口,如创建桶
       $resp = $obsClient->createBucket ( $requestParam1 );
       // 操作成功,处理桶操作调用结果
       printf ( "RequestId:%s\n", $resp ['RequestId'] );
}catch (Obs\ObsException $obsException){       
       // 操作失败,获取详细异常信息
       printf("ExceptionCode:%s\n", $obsException->getExceptionCode());       
       printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
}

// 构造对象操作请求参数
$requestParam2 = [
       'Bucket' => 'bucketname',
       'Key' => 'objectname'
       // 其他字段
];

try{
       // 同步方式调用对象操作接口,如下载对象
       $resp = $obsClient->getObject ( $requestParam2 );
       // 操作成功,处理对象操作调用结果
       printf ( "RequestId:%s\n", $resp ['RequestId'] );
}catch (Obs\ObsException $obsException){
       // 操作失败,获取详细异常信息
       printf("ExceptionCode:%s\n", $obsException->getExceptionCode());
       printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
}

// 关闭obsClient
$obsClient -> close();

异步调用方式

异步调用方式通过回调函数返回调用结果,如果回调函数中SDK自定义异常参数不为空,则表明操作失败;反之,则表明操作成功。示例代码如下:

// 引入依赖库
require 'vendor/autoload.php';
// 使用源码安装时引入SDK代码库
// require 'obs-autoloader.php';
// 声明命名空间
use Obs\ObsClient;
// 创建ObsClient实例
$obsClient = new ObsClient([
      //推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
      //您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
      'key' => getenv('ACCESS_KEY_ID'),
      'secret' => getenv('SECRET_ACCESS_KEY'),
      'endpoint' => 'https://your-endpoint',
]);

// 构造桶操作请求参数
$requestParam1 = [ 
       'Bucket' => 'bucketname' 
       // 其他字段
];

// 异步方式调用桶操作接口,如创建桶
$promise1 = $obsClient->createBucketAsync ( $requestParam1 , function($obsException, $resp){
       if($obsException !== null){
              // 操作失败,获取详细异常信息
              printf("ExceptionCode:%s\n", $obsException->getExceptionCode());
              printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
       }else{
              // 操作成功,处理桶操作调用结果
              printf ( "RequestId:%s\n", $resp ['RequestId'] );
       }
});

// 等待桶操作接口调用结果
$promise1 -> wait();

// 构造对象操作请求参数
$requestParam2 = [
       'Bucket' => 'bucketname',
       'Key' => 'objectname'
       // 其他字段
];

// 异步方式调用对象操作接口,如下载对象
$promise2 = $obsClient->getObjectAsync ( $requestParam2 , function($obsException, $resp){
       if($obsException !== null){
              // 操作失败,获取详细异常信息
              printf("ExceptionCode:%s\n", $obsException->getExceptionCode());
              printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
       }else{
              // 操作成功,处理对象操作调用结果
              printf ( "RequestId:%s\n", $resp ['RequestId'] );
       }
});

// 等待对象操作接口调用结果
$promise2 -> wait();

// 关闭obsClient
$obsClient -> close();

相关文档