全部產品
Search
文件中心

Object Storage Service:管理儲存空間

更新時間:Aug 30, 2018

儲存空間(Bucket)是對象(Object)的容器,對象必須隸屬於某個儲存空間。

以下場景的完整代碼請參見GitHub

建立儲存空間

以下代碼用於建立儲存空間:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try {
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. // 設定儲存空間的儲存類型為低頻訪問類型,預設是標準類型。
  20. $options = array(
  21. OssClient::OSS_STORAGE => OssClient::OSS_STORAGE_IA
  22. );
  23. // 設定儲存空間的許可權為公共讀,預設是私有讀寫。
  24. $ossClient->createBucket($bucket, OssClient::OSS_ACL_TYPE_PUBLIC_READ, $options);
  25. } catch (OssException $e) {
  26. printf(__FUNCTION__ . ": FAILED\n");
  27. printf($e->getMessage() . "\n");
  28. return;
  29. }
  30. print(__FUNCTION__ . ": OK" . "\n");

儲存空間的命名規範,請參見基本概念中的命名規範。

判斷儲存空間是否存在

以下代碼用於判斷指定的儲存空間是否存在:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try {
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. $res = $ossClient->doesBucketExist($bucket);
  20. } catch (OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. if ($res === true) {
  26. print(__FUNCTION__ . ": OK" . "\n");
  27. } else {
  28. print(__FUNCTION__ . ": FAILED" . "\n");
  29. }

列舉儲存空間

以下代碼用於列舉儲存空間:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. try{
  16. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  17. $bucketListInfo = $ossClient->listBuckets();
  18. } catch(OssException $e) {
  19. printf(__FUNCTION__ . ": FAILED\n");
  20. printf($e->getMessage() . "\n");
  21. return;
  22. }
  23. $bucketList = $bucketListInfo->getBucketList();
  24. foreach($bucketList as $bucket) {
  25. print($bucket->getLocation() . "\t" . $bucket->getName() . "\t" . $bucket->getCreatedate() . "\n");
  26. }

設定儲存空間的存取權限

儲存空間的存取權限(ACL)有以下三類:

存取權限 描述 存取權限值
私有 儲存空間的擁有者和授權使用者有該儲存空間內的檔案的讀寫權限,其他使用者沒有許可權操作該儲存空間內的檔案。 OssClient::OSS_ACL_TYPE_PRIVATE
公共讀 儲存空間的擁有者和授權使用者有該儲存空間內的檔案的讀寫權限,其他使用者只有該儲存空間內的檔案的讀許可權。請謹慎使用該許可權。 OssClient::OSS_ACL_TYPE_PUBLIC_READ
公共讀寫 所有使用者都有該儲存空間內的檔案的讀寫權限。請謹慎使用該許可權。 OssClient::OSS_ACL_TYPE_PUBLIC_READ_WRITE

以下代碼用於設定儲存空間的存取權限:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. // 設定儲存空間的許可權為私有。
  18. $acl = OssClient::OSS_ACL_TYPE_PRIVATE;
  19. try {
  20. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  21. $ossClient->putBucketAcl($bucket, $acl);
  22. } catch (OssException $e) {
  23. printf(__FUNCTION__ . ": FAILED\n");
  24. printf($e->getMessage() . "\n");
  25. return;
  26. }
  27. print(__FUNCTION__ . ": OK" . "\n");

獲取儲存空間的存取權限

以下代碼用於獲取儲存空間的存取權限:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try {
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. $res = $ossClient->getBucketAcl($bucket);
  20. } catch (OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. print(__FUNCTION__ . ": OK" . "\n");
  26. print('acl: ' . $res);

獲取儲存空間的地域

以下代碼用於獲取儲存空間的地域(稱為Region或Location):

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try {
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. $Regions = $ossClient->getBucketLocation($bucket);
  20. } catch (OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. print(__FUNCTION__ . ": OK" . "\n");
  26. var_dump($Regions);

關於地域的詳細資料請參見基本概念中的地域。

獲取儲存空間元資訊

以下代碼用於獲取儲存空間元資訊:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try {
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. $Metas = $ossClient->getBucketMeta($bucket);
  20. } catch (OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. print(__FUNCTION__ . ": OK" . "\n");
  26. var_dump($Metas);

刪除儲存空間

刪除儲存空間之前,必須先刪除儲存空間下的所有檔案、LiveChannel和分區上傳產生的碎片。

說明:要刪除分區上傳產生的碎片,首先使用Bucket.ListMultipartUploads列舉出所有碎片,然後使用Bucket.AbortMultipartUpload刪除這些碎片。

以下代碼用於刪除儲存空間:

  1. <?php
  2. if (is_file(__DIR__ . '/../autoload.php')) {
  3. require_once __DIR__ . '/../autoload.php';
  4. }
  5. if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  6. require_once __DIR__ . '/../vendor/autoload.php';
  7. }
  8. use OSS\OssClient;
  9. use OSS\Core\OssException;
  10. // 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
  11. $accessKeyId = "<yourAccessKeyId>";
  12. $accessKeySecret = "<yourAccessKeySecret>";
  13. // Endpoint以杭州為例,其它Region請按實際情況填寫。
  14. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  15. // 儲存空間名稱。
  16. $bucket= "<yourBucketName>";
  17. try{
  18. $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
  19. $ossClient->deleteBucket($bucket);
  20. } catch(OssException $e) {
  21. printf(__FUNCTION__ . ": FAILED\n");
  22. printf($e->getMessage() . "\n");
  23. return;
  24. }
  25. print(__FUNCTION__ . ": OK" . "\n");