对象存储(Object-Oriented Storage,OOS)是AWS发明的云存储服务, AWS称之为S3(Simple Storage Service). 对象存储为客户提供的一种海量、弹性、高可用、高性价比的存储服务,按需使用,像一个超级硬盘一样。
中国电信天翼云提供对象存储(OOS)服务,其API接口兼容AWS S3接口。与众不同的是,中国电信提供一种专线,称为云专线,将企业的局域网与云直连。企业可通过专线访问对象存储,不需通过互联网访问,既安全又高速。这样访问对象存储就跟访问本地硬盘一样快,最高可达到1000M bps, 非常适合于企业大数据量存储、备份。
使用对象存储有两种方式:
第一种是通过门户网页,手工操作上下载文件。天翼云对象存储的门户网址是 http://oos.ctyun.cn/。到电信公司开个户,即可使用。
第二种是通过调用API, 程序方式上下载文件。天翼云兼容AWS S3接口, 可以采用AWS SDK实现API调用。 到电信公司开个户,在门户网页登录后,可获得Access Key 和 Secret, 用于开发。
我经常使用的是PHP, 本文小结一个如何使用AWS PHP SDK存取天翼云的对象存储(OSS)。
一、下载AWS PHP SDK
AWS PHP SDK版本选择: 经测试,目前天翼云只能使用 AWS PHP SDK V2.x 版本。不能使用V3.x版本。
SDK文档在: http://docs.aws.amazon.com/aws-sdk-php/v2/guide/
我下载phar文件(只有一个文件方便用), 下载地址:
http://docs.aws.amazon.com/aws-sdk-php/v2/download/aws.phar
二、AWS PHP SDK的使用
简单说, 就是创建一个 S3Client对象, 然后调用 S3Client对象的几个方法,比如: getObject() 下载对象文件 putObject() 上载对象文件。
关于S3Client对象的开发说明文档在:http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html
当访问天翼云,创建S3Client对象时,要声明 endpoint 为天翼云的服务器地址即可。
例程:
- <?php
- require 'aws.phar'; ////包含AWS SDK文件 aws.phar(只能使用V2版的SDK)
- use Aws\S3\S3Client; //声明使用Aws命名空间中的S3Client类
- //天翼云的API服务器
- $endpoint = 'http://oos.ctyunapi.cn';
- //Access Key 在天翼云门户网站-帐户管理-API密钥管理中获取
- $accessKey = "ACCESS KEY ID";
- //Access Secret 在天翼云门户网站-帐户管理-API密钥管理中获取
- $accessSecret = "SECRECT ID";
- //创建S3 client 对象
- $client = S3Client::factory([
- 'endpoint' => $endpoint, //声明使用指定的endpoint
- 'key' => $accessKey,
- 'secret' => $accessSecret
- ]);
- header('content-type:text/plain');
- //列出所有buckets
- $result = $client->listBuckets(array());
- foreach ($result['Buckets'] as $bucket) {
- // Each Bucket value will contain a Name and CreationDate
- echo "{$bucket['Name']} - {$bucket['CreationDate']}\n";
- }
- echo "\n\n";
- //列出指定bucket下所有的object
- $bucket = 'cwz-public';
- $result = $client->listObjects(array(
- 'Bucket' => $bucket
- ));
- foreach ($result['Contents'] as $object) {
- // Each Bucket value will contain a Name and CreationDate
- echo "{$object['Key']} - {$object['Size']}\n";
- }
- echo "\n\n";
- //上传一个object
- $bucket = 'my-public';
- $key = 'new.txt';
- $body = file_get_contents('new.txt');
- $client->upload($bucket, $key, $body);
- //下载一个object
- $result = $client->getObject(array(
- 'Bucket' => $bucket,
- 'Key' => 'new.txt'
- ));
- echo $result['Body']; //显示文件对象的内容
- ?>