快速入门

优质
小牛编辑
116浏览
2023-12-01

在这一章里,我们将介绍一些关于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中的 AccessKeyIdAccessKeySecret 是由系统分配给用户的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',
));

我们通过 BucketKey 来指定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的使用,本文档的大多数实例代码都没有对异常进行处理。但是,在实际的开发中,为了实现程序的健壮性,你都应该捕获这些异常并处理它们。