全部产品
阿里云办公

管理存储空间

更新时间:2018-08-21 14:47:58

存储空间(Bucket)是存储对象(Object)的容器。对象都隶属于存储空间。

创建存储空间

创建存储空间的完整代码请参见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.CreateBucket("<yourBucketName>")
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. os.Exit(-1)
  19. }
  20. }

存储空间的命名规范,请参见基本概念中的命名规范。您可以在创建存储空间时指定存储空间的权限存储类型

以下代码用于在创建存储空间时指定存储空间的权限:

  1. // 创建存储空间,并设置存储空间的权限为公共读(默认是私有)。
  2. err = client.CreateBucket("<yourBucketName>", oss.ACL(oss.ACLPublicRead))
  3. if err != nil {
  4. fmt.Println("Error:", err)
  5. os.Exit(-1)
  6. }

以下代码用于创建归档类型的存储空间:

  1. err = client.CreateBucket("<yourBucketName>", oss.StorageClass(oss.StorageArchive))
  2. if err != nil {
  3. fmt.Println("Error:", err)
  4. os.Exit(-1)
  5. }

以下代码用于创建低频访问类型的存储空间:

  1. err = client.CreateBucket("<yourBucketName>", oss.StorageClass(oss.StorageIA))
  2. if err != nil {
  3. fmt.Println("Error:", err)
  4. os.Exit(-1)
  5. }

列举存储空间

列举存储空间的完整代码请参见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", "LTAIwFtZDsZIoz4D", "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. }
本文导读目录