初始化
所有文档

          对象存储 BOS

          初始化

          确认Endpoint

          在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于BOS访问域名的部分,理解Endpoint相关的概念。 百度智能云目前开放了多区域支持,请参考区域选择说明

          目前支持“华北-北京”、“华南-广州”和“华东-苏州”三个区域。北京区域:http://bj.bcebos.com,广州区域:http://gz.bcebos.com,苏州区域:http://su.bcebos.com

          对应信息为:

          访问区域 对应Endpoint
          BJ bj.bcebos.com
          GZ gz.bcebos.com
          SU su.bcebos.com

          获取密钥

          要使用百度智能云BOS,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问BOS做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息:

          1. 注册百度智能云账号
          2. 创建AK/SK

          新建BosClient

          BosClient是BOS服务的客户端,为开发者与BOS服务进行交互提供了一系列的方法。

          在新建BosClient之前,需要先创建配置文件对BosClient进行配置,以下将此配置文件命名为YourConf.php,具体配置信息如下所示:

          // 报告所有 PHP 错误
          error_reporting(-1);
          
          define('__BOS_CLIENT_ROOT', dirname(__DIR__));
          
          // 设置BosClient的Access Key ID、Secret Access Key和ENDPOINT
          $BOS_TEST_CONFIG =
              array(
                  'credentials' => array(
                      'accessKeyId' => 'your ak',
                      'secretAccessKey' => 'your sk',
                      'sessionToken' => 'your session token'
                  ),
                  'endpoint' => 'http://bj.bcebos.com',
                  'stsEndpoint' => 'http://sts.bj.baidubce.com',
              );
          
          // 设置log的格式和级别
          $__handler = new \Monolog\Handler\StreamHandler(STDERR, \Monolog\Logger::DEBUG);
          $__handler->setFormatter(
              new \Monolog\Formatter\LineFormatter(null, null, false, true)
          );
          \BaiduBce\Log\LogFactory::setInstance(
              new \BaiduBce\Log\MonoLogFactory(array($__handler))
          );
          \BaiduBce\Log\LogFactory::setLogLevel(\Psr\Log\LogLevel::DEBUG);

          注意:

          1. 在上面代码中,accessKeyId对应控制台中的“Access Key ID”,secretAccessKey对应控制台中的“Access Key Secret”,获取方式请参考《操作指南 管理ACCESSKEY》。
          2. 如果用户需要自己指定域名,可以通过传入ENDPOINT参数来指定,ENDPOINT参数需要用指定区域的域名来进行定义,如服务所在区域为北京,则为http://bj.bcebos.com
          3. 如果不使用STS验证方式,则stsEndpointsessionToken可以为空或者删除。

          使用AK/SK新建BosClient

          通过AK/SK方式访问BOS,用户可以参考如下代码新建一个BosClient:

          //使用PHP SDK,并且使用自定义配置文件
          include 'BaiduBce.phar';
          require 'YourConf.php';
          
          use BaiduBce\BceClientConfigOptions;
          use BaiduBce\Util\MimeTypes;
          use BaiduBce\Http\HttpHeaders;
          use BaiduBce\Services\Bos\BosClient;
          
          //调用配置文件中的参数
          global $BOS_TEST_CONFIG;
          //新建BosClient
          $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:

          1. 首先进行STS的endpoint配置。STS的配置示例如下:

            $BOS_TEST_CONFIG =
                array(
                    'credentials' => array(
                        'accessKeyId' => 'your ak',
                        'secretAccessKey' => 'your sk',
                    ),
            	'stsEndpoint' => 'http://sts.bj.baidubce.com',
                );
          2. StsClient的示例代码如下:

            //新建StsClient
            $client = new StsClient($BOS_TEST_CONFIG);
            $aclArray = 
                array(
                   'id' => 'test-acl',
                   'accessControlList' => array(
                        array(
                            'permission' => array('GET'),
                            'service' => 'bce:bos',
                            'region' => 'bj',
                            'effect' => 'Allow',
                            'resource' => array('testbucket/*')
                        )
                    )
                );
            $request =
                array(
                    'acl' => json_encode($aclArray), //用户定义的acl
                    'durationSeconds' => 43200, //STS凭证有效时间
                );
            $response = $client->getSessionToken($request);
            $accessKeyID= $response->accessKeyId;
            $secretAccessKey= $response->secretAccessKey;
            $sessionToken = $response->sessionToken;

            注意:其中acl指用户定义的acl,语法请参照访问控制

          3. 将获取到的accessKeyID/secretAccessKey/sessionToken写入到配置文件YourConf.php中并新建BosClient。

            $BOS_TEST_CONFIG =
                array(
                    'credentials' => array(
                        'accessKeyId' => 'your ak',
                        'secretAccessKey' => 'your sk',
                        'sessionToken' => 'your session token'
                    ),
                    'endpoint' => 'http://bj.bcebos.com',
                );
            
            //新建BosClient
            $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:

            $BOS_CONFIG =
              array(
                  'credentials' => array(
                      'ak' => 'your-ak',
                      'sk' => 'your-sk',
                  ),
                  'endpoint' => 'https://bj.bcebos.com',
              );
            $client = new BosClient($BOS_CONFIG);
          • 通过在protocol中指定https来设置HTTPS协议:

            $BOS_CONFIG =
              array(
                  'credentials' => array(
                      'ak' => 'your-ak',
                      'sk' => 'your-sk',
                  ),
                  'endpoint' => 'bj.bcebos.com',
                  'protocol' => 'https',
              );
            $client = new BosClient($BOS_CONFIG);

            注意:如果您在指定了endpoint的scheme的同时指定了protocol参数,则以endpoint为准。

            $BOS_CONFIG =
              array(
                  'credentials' => array(
                      'ak' => 'your-ak',
                      'sk' => 'your-sk',
                  ),
                  'endpoint' => 'http://bj.bcebos.com',
                  'protocol' => 'https',
              );
            $client = new BosClient($BOS_CONFIG); //将以http方式访问bos

          使用自定义域名(CNAME)访问BOS

          您可以通过如下方式在BOS PHP SDK中使用自定义域名访问BOS服务:

          在endpoint中指定自定义域名,以及custom字段为true,表示使用自定义域名:

          $BOS_CONFIG =
            array(
                'credentials' => array(
                    'ak' => 'your-ak',
                    'sk' => 'your-sk',
                ),
                'endpoint' => 'http://custom-domain.com',
                'custom' => true,
            );
          $client = new BosClient($BOS_CONFIG);
          $client->putObjectFromFile(null, $objectKey, $fileName);

          注意:如果您在PHP SDK中使用自定义域名新建BosClient,建议访问API接口时把bucketName字段设置成null;目前PHP SDK使用自定义域名时暂不支持copyObject和uploadPartCopy接口。

          配置BosClient

          设置自定义参数

          PHP SDK在\BaiduBce\Bce.php中默认设置了一些基本参数,若用户想要对参数的值进行修改,可以参考此文件来创建自身的参数配置函数,并在构造BosClient的时候传入,传入代码参考如下:

          public function CustomizedConfig() {
              $customizedConfig = array(
                  BceClientConfigOptions::PROTOCOL => 'http',
                  BceClientConfigOptions::REGION => 'bj',
                  BceClientConfigOptions::CONNECTION_TIMEOUT_IN_MILLIS => 120 * 1000,
                  BceClientConfigOptions::SOCKET_TIMEOUT_IN_MILLIS => 300 * 1000,
                  BceClientConfigOptions::SEND_BUF_SIZE => 5 * 1024 * 1024,
                  BceClientConfigOptions::RECV_BUF_SIZE => 5 * 1024 * 1024,
                  BceClientConfigOptions::CREDENTIALS => array(
                      'ak' => 'your-access-key-id',
                      'sk' => 'your-secret-access-key',
                  ),
                  'endpoint' => 'your-endpoint',
              );
          
              //利用自定义配置创建BOSClient
              $customizedClient = new BosClient($customizedConfig);
          
              //通过自定义配置调用方法
              $options = array(BosOptions::CONFIG=>$customizedConfig);
              $this->client->listBuckets($options);
          }

          参数说明如下:

          参数 说明 默认值
          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方法为例,参考如下代码实现设置可选参数:

          //利用options在通过文件上传Object的时候传入指定参数
          file_put_contents($fileName, "test of put object from string");
          $user_meta = array("x-bce-meta-key1" => "value1");
          
          $options = array(
              BosOptions::CONTENT_TYPE=>"text/plain",
              BosOptions::CONTENT_MD5=>base64_encode(hash_file("md5", $fileName, true)),
              BosOptions::CONTENT_LENGTH=>filesize($fileName),
              BosOptions::CONTENT_SHA256=>hash_file("sha256", $fileName),
              BosOptions::USER_METADATA => $user_meta,
          );
          $client->putObjectFromFile($bucketName, $objectKey, $fileName, $options);

          注意:不要把null传入$options中,否则调用时会抛出异常。

          上一篇
          安装SDK工具包
          下一篇
          Bucket管理