开发者社区> 问答> 正文

PHP-SDK之如何实现管理存储空间?

Bucket是OSS上的存储空间,也是计费、权限控制、日志记录等高级功能的管理实体。


提示:
  • 以下场景的完整代码请参考: GitHub


新建存储空间


您可以使用OssClient::createBucket新建存储空间: <?php
/**
* 创建一存储空间
* acl 指的是bucket的访问控制权限,有三种,私有读写,公共读私有写,公共读写。
* 私有读写就是只有bucket的拥有者或授权用户才有权限操作
* 三种权限分别对应OSSClient::OSS_ACL_TYPE_PRIVATE,
*               OssClient::OSS_ACL_TYPE_PUBLIC_READ,
*               OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 要创建的bucket名字
* @return null
*/
function createBucket($ossClient, $bucket)
{
    try {
        $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PRIVATE);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


提示:
  • Bucket的命名规范,参见基本概念中的 命名规范
  • Bucket的名字是[backcolor=transparent]全局唯一的,所以您需要保证Bucket名称不与别人重复。
  • Bucket权限更详细的解释,请查参看 权限控制


判断存储空间是否存在


您可以使用OssClient::doesBucketExist判断存储空间是否存在: /**
*  判断Bucket是否存在
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
*/
function doesBucketExist($ossClient, $bucket)
{
    try {
        $res = $ossClient->doesBucketExist($bucket);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    if ($res === true) {
        print(__FUNCTION__ . ": OK" . "\n");
    } else {
        print(__FUNCTION__ . ": FAILED" . "\n");
    }
}



列出用户所有的存储空间


您可以使用OssClient::listBuckets列出用户所有的存储空间: <?php
/**
* 列出用户所有的Bucket
*
* @param OssClient $ossClient OssClient实例
* @return null
*/
function listBuckets($ossClient)
{
    $bucketList = null;
    try{
        $bucketListInfo = $ossClient->listBuckets();
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    $bucketList = $bucketListInfo->getBucketList();
    foreach($bucketList as $bucket) {
        print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
    }
}



删除存储空间


您可以使用OssClient::deleteBucket删除存储空间: <?php
/**
* 删除存储空间
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 待删除的存储空间名称
* @return null
*/
function deleteBucket($ossClient, $bucket)
{
    try{
        $ossClient->deleteBucket($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


提示:
  • 如果存储空间不为空(存储空间中有文件或者分片上传的分片),则存储空间无法删除;
  • 必须先删除存储空间中的所有文件和分片后,存储空间才能成功删除。


设置存储空间访问权限(ACL)


除了在创建存储空间的时候能够对存储空间的 ACL 进行设置,也可以根据自己的业务需求对存储空间的ACL进行修改。这个操作只有该存储空间的创建者有权限执行。关于存储空间权限更详细的解释,请参看 权限控制
存储空间有三种访问权限:
权限PHP SDK对应值
私有读写OssClient::OSS_ACL_TYPE_PRIVATE
公共读私有写OssClient::OSS_ACL_TYPE_PUBLIC_READ
公共读写OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE

您可以使用OssClient::putBucketAcl设置存储空间的访问权限: <?php
/**
* 设置bucket的acl配置
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putBucketAcl($ossClient, $bucket)
{
    $acl = OssClient::OSS_ACL_TYPE_PRIVATE;
    try {
        $ossClient->putBucketAcl($bucket, $acl);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}



获取存储空间访问权限(ACL)


您可以使用OssClient::getBucketAcl获取存储空间的访问权限: <?php
/**
* 获取bucket的acl配置
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function getBucketAcl($ossClient, $bucket)
{
    try {
        $res = $ossClient->getBucketAcl($bucket);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    print('acl: ' . $res);
}


展开
收起
青衫无名 2017-10-19 09:56:15 1882 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载