3. 快速入门

请确认您已经熟悉NOS的基本概念,如Bucket、Object、EndPoint、AccessKeyId和AccessKeySecret等。 本节您将看到如何快速的使用NOS PHP SDK,完成常用的操作,创建桶、上传文件、下载文件等。

3.1. 常用类

常用类 备注
S3Client S3 客户端类,用户通过NosClient调用服务
AwsException S3异常,在调用过程中去捕获这个异常,查看失败原因

3.2. 基本操作

3.2.1. 创建桶

您可以使用以下代码新建一个桶:

<?php
/**
 * 创建一个桶
 * acl 指的是bucket的访问控制权限,有两种,私有读写,公共读私有写。
 * 私有读写就是只有bucket的拥有者或授权用户才有权限操作
 * 公共读私有写,任意用户可以读,只有授权用户才能写
 *
 * @param S3Client  $S3Client S3Client实例
 * @param string    $bucketName 要创建的bucket名字
 * @param string    $Acl,有效的值为private-->write,public-read-->read
 */

function createBucket($s3Client,$bucketName,$Acl){
    try {
        $result = $s3Client->createBucket([
            'Bucket' => $bucketName,
            'ACL' => $Acl
        ]);
    }catch (AwsException $e) {
        // output error message if fails
        echo $e->getMessage() + "\n";
    }
}

Attention

桶名命名规则请参见 API 手册 桶命名规范

更多的关于bucket的操作的信息,请参见 S3-PHP-SDK Bucket管理

3.2.2. 上传文件

对象(Object)是NOS中最基本的数据单元,您可以把它简单的理解为文件,以下代码可以实现简单的对象上传:

    <?php
/**
* @param $s3Client S3Client实例
* @param $bucketName 桶名
* @param $objectName 对象名
* @param $Body 'mixed type: string|resource|\Guzzle\Http\EntityBodyInterface'
*/
function putObject($s3Client,$bucketName,$objectName,$Body){//Body中传入字符串即可
    try{
        $result = $s3Client->putObject(['Bucket'=>$bucketName,
            'Key'=>$objectName,
            'Body'=>$Body]);
        echo $result;
    } catch (\Aws\Exception\AwsException $exception){
        echo $exception->getMessage();
    }
}

Attention

对象命名规则请参见 API 手册 对象

更多的上传文件信息,请参见 S3-PHP-SDK 上传文件

3.2.3. 下载文件

上传对象成功之后,您可以读取它的内容,以下代码可以实现文件的下载:

    <?php
/**
* 获取对象
* @param $s3Client S3Client实例
* @param $bucketName 桶名
* @param $objectName 对象名
*/
function getObject($s3Client,$bucketName,$objectName){
    try{
        $result = $s3Client->getObject(['Bucket'=>$bucketName,
            'Key'=>$objectName]);
        // The 'Body' value of the result is an EntityBody object
        echo get_class($result['Body']) . "\n";
        // > Guzzle\Http\EntityBody

        // The 'Body' value can be cast to a string
        echo $result['Body'] . "\n";
        // > Hello!
    } catch (\Aws\Exception\AwsException $e){
        echo $e->getMessage();
    }
}

更多的下载文件信息,请参见 S3-PHP-SDK 下载文件

3.2.4. 列举文件

当上传文件成功之后,可以查看桶中包含的文件列表,以下代码展示如何列举桶内的文件:

    <?php
/**
* @param $s3Client S3Client实例
* @param $bucket 桶名
*/
function listAllObjects($s3Client, $bucket){

            try {
                    $listObjectInfo = $s3Client->listObjects(['Bucket'=>$bucket]);
            } catch (AwsException $e) {
                    printf(__FUNCTION__ . ": FAILED\n");
                    printf($e->getMessage() . "\n");
                    return;
            }
            var_dump($listObjectInfo);
            //得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
            $nextMarker = $listObjectInfo['NextMarker'];
            echo "nextMarker" . $nextMarker . "\n";

    }

}

Note

上面的代码默认列举100个object

更多的管理文件信息,请参见 S3-PHP-SDK 文件管理

3.2.5. 删除文件

文件上传成功后,可以指定删除桶中的文件,以下代码实现桶中文件的删除:

     <?php
/**
 * @param $nosClient S3Client实例
 * @param $bucketName 桶名
 * @param $objectName 对象名
 */
 function deleteObject($s3Client, $bucketName,$objectName)
 {
     try{
         $s3Client->deleteObject(['Bucket'=>$bucketName, 'Key'=>$objectName]);
     } catch(AwsException $e) {
         printf(__FUNCTION__ . ": FAILED\n");
         printf($e->getMessage() . "\n");
         return;
     }
     print(__FUNCTION__ . ": OK" . "\n");
 }

3.2.6. 返回结果处理

NosClient中的接口对应返回数据分为两类:

  • Put,Delete类接口返回相应的响应,如果没有AwsException,即可认为操作成功
  • Get,List类接口返回对应的数据,如果没有AwsException,即可认为操作成功