初始化
确认Endpoint
在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于BOS访问域名的部分,理解Endpoint相关的概念。 百度智能云目前开放了多区域支持,请参考区域选择说明。 region与endpoint参考如下链接 https://cloud.baidu.com/doc/BOS/s/akrqd2wcx 。 目前BOS支持区域与访问域名对应信息为:
访问区域 | 对应Endpoint |
---|---|
华北-北京 | bj.bcebos.com |
华北-保定 | bd.bcebos.com |
华东-苏州 | su.bcebos.com |
华南-广州 | gz.bcebos.com |
西南-成都 | cd.bcebos.com |
中国香港 | hkg.bcebos.com |
华中-武汉 | fwh.bcebos.com |
华东金融-上海 | fsh.bcebos.com |
获取密钥
要使用百度智能云BOS,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息:
新建BosClient
BosClient是BOS服务的客户端,为开发者与BOS服务进行交互提供了一系列的方法。
在新建BosClient之前,需要先创建配置文件对BosClient进行配置,以下将此配置文件命名为YourConf.php
,具体配置信息如下所示:
1// 报告所有 PHP 错误
2error_reporting(-1);
3
4define('__BOS_CLIENT_ROOT', dirname(__DIR__));
5
6// 设置BosClient的Access Key ID、Secret Access Key和ENDPOINT
7$BOS_TEST_CONFIG =
8 array(
9 'credentials' => array(
10 'accessKeyId' => 'your ak',
11 'secretAccessKey' => 'your sk',
12 'sessionToken' => 'your session token'
13 ),
14 'endpoint' => 'http://bj.bcebos.com',
15 'stsEndpoint' => 'http://sts.bj.baidubce.com',
16 );
17
18// 设置log的格式和级别
19$__handler = new \Monolog\Handler\StreamHandler(STDERR, \Monolog\Logger::DEBUG);
20$__handler->setFormatter(
21 new \Monolog\Formatter\LineFormatter(null, null, false, true)
22);
23\BaiduBce\Log\LogFactory::setInstance(
24 new \BaiduBce\Log\MonoLogFactory(array($__handler))
25);
26\BaiduBce\Log\LogFactory::setLogLevel(\Psr\Log\LogLevel::DEBUG);
注意:
- 在上面代码中,
accessKeyId
对应控制台中的“Access Key ID”,secretAccessKey
对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 管理ACCESSKEY》。- 如果用户需要自己指定域名,可以通过传入ENDPOINT参数来指定,
ENDPOINT
参数需要用指定区域的域名来进行定义,如服务所在区域为北京,则为http://bj.bcebos.com
。- 如果不使用STS验证方式,则
stsEndpoint
和sessionToken
可以为空或者删除。
使用AK/SK新建BosClient
通过AK/SK方式访问BOS,用户可以参考如下代码新建一个BosClient:
1//使用PHP SDK,并且使用自定义配置文件
2include 'BaiduBce.phar';
3require 'YourConf.php';
4
5use BaiduBce\BceClientConfigOptions;
6use BaiduBce\Util\MimeTypes;
7use BaiduBce\Http\HttpHeaders;
8use BaiduBce\Services\Bos\BosClient;
9
10//调用配置文件中的参数
11global $BOS_TEST_CONFIG;
12//新建BosClient
13$client = new BosClient($BOS_TEST_CONFIG);
使用STS创建BosClient
申请STS token
BOS可以通过STS机制实现第三方的临时授权访问。STS(Security Token Service)是百度智能云提供的临时授权服务。通过STS,您可以为第三方用户颁发一个自定义时效和权限的访问凭证。第三方用户可以使用该访问凭证直接调用百度智能云的API或SDK访问百度智能云资源。
通过STS方式访问BOS,用户需要先通过STS的client申请一个认证字符串,申请方式可参见百度智能云STS使用介绍。
用STS token新建BOSClient
申请好STS后,可将STStoken配置到BosClient中,用户可以参考如下代码新建一个BosClient:
-
首先进行STS的endpoint配置。STS的配置示例如下:
PHP1$BOS_TEST_CONFIG = 2 array( 3 'credentials' => array( 4 'accessKeyId' => 'your ak', 5 'secretAccessKey' => 'your sk', 6 ), 7 'stsEndpoint' => 'http://sts.bj.baidubce.com', 8 );
-
StsClient的示例代码如下:
PHP1use BaiduBce\Services\Sts\StsClient; 2//新建StsClient 3$client = new StsClient($BOS_TEST_CONFIG); 4$aclArray = 5 array( 6 'id' => 'test-acl', 7 'accessControlList' => array( 8 array( 9 'permission' => array('GET'), 10 'service' => 'bce:bos', 11 'region' => 'bj', 12 'effect' => 'Allow', 13 'resource' => array('testbucket/*') 14 ) 15 ) 16 ); 17$request = 18 array( 19 'acl' => json_encode($aclArray), //用户定义的acl 20 'durationSeconds' => 43200, //STS凭证有效时间 21 ); 22$response = $client->getSessionToken($request); 23$accessKeyID= $response->accessKeyId; 24$secretAccessKey= $response->secretAccessKey; 25$sessionToken = $response->sessionToken;
注意:其中acl指用户定义的acl,语法请参照访问控制。
-
将获取到的accessKeyID/secretAccessKey/sessionToken写入到配置文件
YourConf.php
中并新建BosClient。PHP1$BOS_TEST_CONFIG = 2 array( 3 'credentials' => array( 4 'accessKeyId' => 'your ak', 5 'secretAccessKey' => 'your sk', 6 'sessionToken' => 'your session token' 7 ), 8 'endpoint' => 'http://bj.bcebos.com', 9 ); 10 11//新建BosClient 12$client = new BosClient($BOS_TEST_CONFIG);
注意: 目前使用STS配置client时,无论对应BOS服务的endpoint在哪里,endpoint都需配置为
http://sts.bj.baidubce.com
。
配置HTTPS协议访问BOS
BOS支持HTTPS传输协议,您可以通过如下两种方式在BOS PHP SDK中使用HTTPS访问BOS服务:
-
在endpoint中指定HTTPS:
PHP1$BOS_CONFIG = 2 array( 3 'credentials' => array( 4 'ak' => 'your-ak', 5 'sk' => 'your-sk', 6 ), 7 'endpoint' => 'https://bj.bcebos.com', 8 ); 9$client = new BosClient($BOS_CONFIG);
-
通过在
protocol
中指定https
来设置HTTPS协议:PHP1$BOS_CONFIG = 2 array( 3 'credentials' => array( 4 'ak' => 'your-ak', 5 'sk' => 'your-sk', 6 ), 7 'endpoint' => 'bj.bcebos.com', 8 'protocol' => 'https', 9 ); 10$client = new BosClient($BOS_CONFIG);
注意:如果您在指定了endpoint的scheme的同时指定了protocol参数,则以endpoint为准。
PHP1$BOS_CONFIG = 2 array( 3 'credentials' => array( 4 'ak' => 'your-ak', 5 'sk' => 'your-sk', 6 ), 7 'endpoint' => 'http://bj.bcebos.com', 8 'protocol' => 'https', 9 ); 10$client = new BosClient($BOS_CONFIG); //将以http方式访问bos
使用自定义域名(CNAME)访问BOS
您可以通过如下方式在BOS PHP SDK中使用自定义域名访问BOS服务:
在endpoint中指定自定义域名,以及custom字段为true,表示使用自定义域名:
1$BOS_CONFIG =
2 array(
3 'credentials' => array(
4 'ak' => 'your-ak',
5 'sk' => 'your-sk',
6 ),
7 'endpoint' => 'http://custom-domain.com',
8 'custom' => true,
9 );
10$client = new BosClient($BOS_CONFIG);
11$client->putObjectFromFile(null, $objectKey, $fileName);
注意:如果您在PHP SDK中使用自定义域名新建BosClient,建议访问API接口时把bucketName字段设置成null;目前PHP SDK使用自定义域名时暂不支持copyObject和uploadPartCopy接口。
配置BosClient
设置自定义参数
PHP SDK在\BaiduBce\Bce.php
中默认设置了一些基本参数,若用户想要对参数的值进行修改,可以参考此文件来创建自身的参数配置函数,并在构造BosClient的时候传入,传入代码参考如下:
1public function CustomizedConfig() {
2 $customizedConfig = array(
3 BceClientConfigOptions::PROTOCOL => 'http',
4 BceClientConfigOptions::REGION => 'bj',
5 BceClientConfigOptions::CONNECTION_TIMEOUT_IN_MILLIS => 120 * 1000,
6 BceClientConfigOptions::SOCKET_TIMEOUT_IN_MILLIS => 300 * 1000,
7 BceClientConfigOptions::SEND_BUF_SIZE => 5 * 1024 * 1024,
8 BceClientConfigOptions::RECV_BUF_SIZE => 5 * 1024 * 1024,
9 BceClientConfigOptions::CREDENTIALS => array(
10 'ak' => 'your-access-key-id',
11 'sk' => 'your-secret-access-key',
12 ),
13 'endpoint' => 'your-endpoint',
14 );
15
16 //利用自定义配置创建BOSClient
17 $customizedClient = new BosClient($customizedConfig);
18
19 //通过自定义配置调用方法
20 $options = array(BosOptions::CONFIG=>$customizedConfig);
21 $this->client->listBuckets($options);
22}
参数说明如下:
参数 | 说明 | 默认值 |
---|---|---|
PROTOCOL | 协议 | http |
REGION | 区域 | bj |
CONNECTION_TIMEOUT_IN_MILLIS | 请求超时时间(单位:毫秒) | 50 * 1000 |
SOCKET_TIMEOUT_IN_MILLIS | 通过打开的连接传输数据的超时时间(单位:毫秒) | 0(指的是无限等待,若设置非0数值需要对文件大小和网速进行评估,否则上传大文件时会产生超时) |
SEND_BUF_SIZE | 发送缓冲区大小 | 1024 * 1024 |
RECV_BUF_SIZE | 接收缓冲区大小 | 10 1024 1024 |
设置可选参数
BOSClient将可选的参数封装到$options
中,每一个方法具有的可选参数详见具体的接口使用方法介绍,现以putObjectFromFile
方法为例,参考如下代码实现设置可选参数:
1//利用options在通过文件上传Object的时候传入指定参数
2file_put_contents($fileName, "test of put object from string");
3$user_meta = array("x-bce-meta-key1" => "value1");
4
5$options = array(
6 BosOptions::CONTENT_TYPE=>"text/plain",
7 BosOptions::CONTENT_MD5=>base64_encode(hash_file("md5", $fileName, true)),
8 BosOptions::CONTENT_LENGTH=>filesize($fileName),
9 BosOptions::CONTENT_SHA256=>hash_file("sha256", $fileName),
10 BosOptions::USER_METADATA => $user_meta,
11);
12$client->putObjectFromFile($bucketName, $objectKey, $fileName, $options);
注意:不要把
null
传入$options
中,否则调用时会抛出异常。