全部產品
Search
文件中心

Object Storage Service:管理Bucket

更新時間:Mar 21, 2019

儲存空間(Bucket)是儲存物件(Object)的容器。對象都隸屬於儲存空間。

建立儲存空間

建立儲存空間的完整代碼請參見GitHub

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. // 建立OSSClient執行個體。
  8. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  9. if err != nil {
  10. fmt.Println("Error:", err)
  11. os.Exit(-1)
  12. }
  13. // 建立儲存空間。預設為標準儲存類型,私有許可權。
  14. err = client.CreateBucket("<yourBucketName>")
  15. if err != nil {
  16. fmt.Println("Error:", err)
  17. os.Exit(-1)
  18. }

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

您可以在建立儲存空間時指定儲存空間的許可權,代碼如下:

  1. // 建立儲存空間,並設定儲存空間的許可權為公共讀。
  2. err = client.CreateBucket("<yourBucketName>", oss.ACL(oss.ACLPublicRead))
  3. if err != nil {
  4. fmt.Println("Error:", err)
  5. os.Exit(-1)
  6. }

列舉儲存空間

列舉儲存空間的完整代碼請參見GitHub

列舉所有的儲存空間

儲存空間按照字母順序排列。您可以列舉所有的儲存空間,或符合指定條件的儲存空間。

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 列舉儲存空間,預設情況下最多返回100條記錄。
  15. lsRes, err := client.ListBuckets()
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. // 列印儲存空間列表。
  21. fmt.Println("Buckets: ", lsRes.Buckets)
  22. for _, bucket := range lsRes.Buckets {
  23. fmt.Println("Bucket: ", bucket.Name)
  24. }
  25. }

列舉指定首碼的儲存空間

以下代碼用於列舉包含指定首碼(prefix)的儲存空間:

  1. // 列舉指定首碼的儲存空間。
  2. lsRes, err = client.ListBuckets(oss.Prefix("<yourBucketPrefix>"))
  3. if err != nil {
  4. fmt.Println("Error:", err)
  5. os.Exit(-1)
  6. }
  7. // 列印儲存空間列表。
  8. fmt.Println("Buckets with prefix: ", lsRes.Buckets)
  9. for _, bucket := range lsRes.Buckets {
  10. fmt.Println("Bucket with prefix: ", bucket.Name)
  11. }

列舉指定marker之後的儲存空間

參數marker代表格儲存體空間名稱。以下代碼用於列舉指定marker之後的儲存空間:

  1. // 列舉指定marker之後的儲存空間。
  2. lsRes, err = client.ListBuckets(oss.Marker("<yourBucketMarker>"))
  3. if err != nil {
  4. fmt.Println("Error:", err)
  5. os.Exit(-1)
  6. }
  7. // 列印儲存空間列表。
  8. fmt.Println("My buckets with marker :", lsRes.Buckets)
  9. for _, bucket := range lsRes.Buckets {
  10. fmt.Println("Bucket with marker: ", bucket.Name)
  11. }

列舉指定個數的儲存空間

以下代碼用於列舉指定個數(maxKeys)的儲存空間:

  1. // 限定此次列舉儲存空間的個數為500。預設值為100,最大值為1000。
  2. lsRes, err = client.ListBuckets(oss.MaxKeys(500))
  3. if err != nil {
  4. fmt.Println("Error:", err)
  5. os.Exit(-1)
  6. }
  7. // 列印儲存空間列表。
  8. fmt.Println("My buckets max num:", lsRes.Buckets)
  9. for _, bucket := range lsRes.Buckets {
  10. fmt.Println("Bucket with maxKeys: ", bucket.Name)
  11. }

判斷儲存空間是否存在

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 判斷儲存空間是否存在。
  15. isExist, err := client.IsBucketExist("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. fmt.Println("IsBucketExist result : ", isExist)
  21. }

設定儲存空間的存取權限

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

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

更多關於存取權限的內容請參見開發指南中的存取控制。儲存空間的存取權限的完整代碼請參見GitHub

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 設定儲存空間的存取權限為公共讀。
  15. err = client.SetBucketACL("<yourBucketName>", oss.ACLPublicRead)
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. }

獲取儲存空間的存取權限

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 獲取儲存空間的存取權限。
  15. aclRes, err := client.GetBucketACL("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. fmt.Println("Bucket ACL:", aclRes.ACL)
  21. }

獲取儲存空間的地域

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 獲取儲存空間的地域。
  15. loc, err := client.GetBucketLocation("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. fmt.Println("Bucket Location:", loc)
  21. }

獲取儲存空間的資訊

以下代碼用於獲取儲存空間的資訊(Info):

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 儲存空間的資訊包括地域(Region或Location)、建立日期(CreationDate)、存取權限(ACL)、擁有者(Owner)、儲存類型(StorageClass)等。
  15. res, err := client.GetBucketInfo("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. fmt.Println("BucketInfo.Location: ", res.BucketInfo.Location)
  21. fmt.Println("BucketInfo.CreationDate: ", res.BucketInfo.CreationDate)
  22. fmt.Println("BucketInfo.ACL: ", res.BucketInfo.ACL)
  23. fmt.Println("BucketInfo.Owner: ", res.BucketInfo.Owner)
  24. fmt.Println("BucketInfo.StorageClass: ", res.BucketInfo.StorageClass)
  25. }

刪除儲存空間

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

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

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

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 建立OSSClient執行個體。
  9. client, err := oss.New("oss-cn-hangzhou-internal.aliyuncs.com", "LTAIw******Ioz4D", "I2LPGDO2SB6c5nwWyaBQFR91R2Zvll")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. // 刪除儲存空間。
  15. err = client.DeleteBucket("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. }