快速入门
在这一章里,我们将介绍一些关于SDK的基本操作。
Step 1. 初始化OSSClient
SDK与OSS后台服务所有的交互都是通过OSSClient完成的。通过以下代码,可以生成OSSClient的实例:
<?php require_once '/path/to/sdk/aliyun.php'; use \Aliyun\OSS\OSSClient; $client = OSSClient::factory(array( 'AccessKeyId' => '<access-key-id>', 'AccessKeySecret' => '<access-key-secret>', ));
由于SDK使用了命名空间机制,需要在文件开始声明使用 \Aliyun\OSS\OSSClient 类。
OSSClient使用工厂方法构建了一个OSSClient实例,此方法接收一个array作为输入参数;array中的 AccessKeyId 和 AccessKeySecret 是由系统分配给用户的ID对,用于标识用户,为访问OSS做签名验证。
我们看到,上面的例子通过在array中设置 key-value 对来传递参数。之后要介绍的大部分SDK接口也是通过这种形式来使用的。
Step 2. 创建Bucket
你可以通过以下代码来创建Bucket:
<?php $client->createBucket(array( 'Bucket' => 'your-bucket-name', ));
通过指定 Bucket 参数来制定Bucket的名字,Bucket的名称有全局唯一性,请尽量保证你的Bucket名称不与别人的重复。
关于Bucket的命名规范,参见 Bucket命名规范 。
Step 3. 上传Object
Object可以简单的理解成一个文件,你可以通过以下代码把Object上传到一个Bucket中:
<?php $client->putObject(array( 'Bucket' => 'your-bucket-name', 'Key' => 'your-object-key', 'Content' => 'This is my content', ));
我们通过 Bucket 和 Key 来指定Object所在的Bucket以及Object的名字。 Content 为Object的实际内容,它可以为字符串或者是资源类型(resource),当 Content 类型为resource时,你必须指定Object的大小(以字节为单位)。
比如:
<?php $client->putObject(array( 'Bucket' => 'your-bucket-name', 'Key' => 'your-object-key', 'Content' => fopen('/path/to/file', 'r'), 'ContentLength' => filesize('/path/to/file'), ));
关于Object的命名规范,参见 Object命名规范 。
关于上传Object更详细的信息,参见 上传Object 。
Step 4. 获取Object列表
你可能想知道在一个Bucket中存的Object是什么,通过 listObjects 接口可以达到这一目的:
<?php $objectListing = $client->listObjects(array( 'Bucket' => 'your-bucket-name', )); foreach ($objectListing->getObjectSummarys() as $objectSummary) { echo $objectSummary->getKey(); }
listObjects 接口会返回 \Aliyun\OSS\Model\ObjectListing 对象,你可以通过对象的 getObjectSummarys 方法获取Object的列表。
Step 5. 下载Object
通过下面代码我们可以获取一个已经上传了的Object的内容:
<?php $object = $client->getObject(array( 'Bucket' => 'your-bucket-name', 'Key' => 'your-object-key', )); echo (string)$object;
事实上,getObject 方法返回了一个 \Aliyun\OSS\Model\OSSObject 的对象,此对象包含了Object的一些信息,以及一个可以用来读取object内容的resource类型的成员。
<?php $object = $client->getObject(array( 'Bucket' => 'your-bucket-name', 'Key' => 'your-object-key', )); echo "Key: " . $object->getKey() . "\n"; echo "Update Date: " . $object->getLastModified()->getTimestamp() . "\n"; echo "Content: \n"; echo stream_get_contents($object->getObjectContent()); // Print object's content.
Step 6. 处理异常
当我们执行一些错误的操作,比如试图获取一个不存在的bucket的Object列表的时候,SDK会抛出类型为 \Aliyun\OSS\Exceptions\OSSException 的异常;另外,由于网络错误等原因,client也有可能抛出 \Aliyun\Common\Exceptions\ClientException 异常。你可以catch这些异常:
<?php try { $client->listObjects(array( 'Bucket' => 'bucket-non-exist', )); } catch (\Aliyun\OSS\Exceptions\OSSException $ex) { echo "Error: " . $ex->getErrorCode() . "\n"; } catch (\Aliyun\Common\Exceptions\ClientException $ex) { echo "ClientError: " . $ex->getMessage() . "\n"; }
为了更简明地阐述SDK的使用,本文档的大多数实例代码都没有对异常进行处理。但是,在实际的开发中,为了实现程序的健壮性,你都应该捕获这些异常并处理它们。