儲存空間(Bucket)是儲存物件(Object)的容器。對象都隸屬於儲存空間。
建立儲存空間
建立儲存空間的完整代碼請參見GitHub。
以下代碼用於建立儲存空間:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 建立儲存空間。預設為標準儲存類型,私有許可權。
err = client.CreateBucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
儲存空間的命名規範,請參見基本概念中的命名規範。
您可以在建立儲存空間時指定儲存空間的許可權,代碼如下:
// 建立儲存空間,並設定儲存空間的許可權為公共讀。
err = client.CreateBucket("<yourBucketName>", oss.ACL(oss.ACLPublicRead))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
列舉儲存空間
列舉儲存空間的完整代碼請參見GitHub。
列舉所有的儲存空間
儲存空間按照字母順序排列。您可以列舉所有的儲存空間,或符合指定條件的儲存空間。
以下代碼用於列舉所有的儲存空間:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列舉儲存空間,預設情況下最多返回100條記錄。
lsRes, err := client.ListBuckets()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印儲存空間列表。
fmt.Println("Buckets: ", lsRes.Buckets)
for _, bucket := range lsRes.Buckets {
fmt.Println("Bucket: ", bucket.Name)
}
}
列舉指定首碼的儲存空間
以下代碼用於列舉包含指定首碼(prefix)的儲存空間:
// 列舉指定首碼的儲存空間。
lsRes, err = client.ListBuckets(oss.Prefix("<yourBucketPrefix>"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印儲存空間列表。
fmt.Println("Buckets with prefix: ", lsRes.Buckets)
for _, bucket := range lsRes.Buckets {
fmt.Println("Bucket with prefix: ", bucket.Name)
}
列舉指定marker之後的儲存空間
參數marker代表格儲存體空間名稱。以下代碼用於列舉指定marker之後的儲存空間:
// 列舉指定marker之後的儲存空間。
lsRes, err = client.ListBuckets(oss.Marker("<yourBucketMarker>"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印儲存空間列表。
fmt.Println("My buckets with marker :", lsRes.Buckets)
for _, bucket := range lsRes.Buckets {
fmt.Println("Bucket with marker: ", bucket.Name)
}
列舉指定個數的儲存空間
以下代碼用於列舉指定個數(maxKeys)的儲存空間:
// 限定此次列舉儲存空間的個數為500。預設值為100,最大值為1000。
lsRes, err = client.ListBuckets(oss.MaxKeys(500))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印儲存空間列表。
fmt.Println("My buckets max num:", lsRes.Buckets)
for _, bucket := range lsRes.Buckets {
fmt.Println("Bucket with maxKeys: ", bucket.Name)
}
判斷儲存空間是否存在
以下代碼用於判斷指定的儲存空間是否存在:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 判斷儲存空間是否存在。
isExist, err := client.IsBucketExist("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("IsBucketExist result : ", isExist)
}
設定儲存空間的存取權限
儲存空間的存取權限(ACL)有以下三類:
存取權限 | 描述 | 存取權限值 |
---|---|---|
私有 | 儲存空間的擁有者和授權使用者有該儲存空間內的檔案的讀寫權限,其他使用者沒有許可權操作該儲存空間內的檔案。 | oss.ACLPrivate |
公共讀 | 儲存空間的擁有者和授權使用者有該儲存空間內的檔案的讀寫權限,其他使用者只有該儲存空間內的檔案的讀許可權。請謹慎使用該許可權。 | oss.ACLPublicRead |
公共讀寫 | 所有使用者都有該儲存空間內的檔案的讀寫權限。請謹慎使用該許可權。 | oss.ACLPublicReadWrite |
更多關於存取權限的內容請參見開發指南中的存取控制。儲存空間的存取權限的完整代碼請參見GitHub。
以下代碼用於設定儲存空間的存取權限:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 設定儲存空間的存取權限為公共讀。
err = client.SetBucketACL("<yourBucketName>", oss.ACLPublicRead)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
獲取儲存空間的存取權限
以下代碼用於獲取儲存空間的存取權限:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取儲存空間的存取權限。
aclRes, err := client.GetBucketACL("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Bucket ACL:", aclRes.ACL)
}
獲取儲存空間的地域
以下代碼用於獲取儲存空間的地域(稱為Region或Location):
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取儲存空間的地域。
loc, err := client.GetBucketLocation("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Bucket Location:", loc)
}
獲取儲存空間的資訊
以下代碼用於獲取儲存空間的資訊(Info):
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 儲存空間的資訊包括地域(Region或Location)、建立日期(CreationDate)、存取權限(ACL)、擁有者(Owner)、儲存類型(StorageClass)等。
res, err := client.GetBucketInfo("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("BucketInfo.Location: ", res.BucketInfo.Location)
fmt.Println("BucketInfo.CreationDate: ", res.BucketInfo.CreationDate)
fmt.Println("BucketInfo.ACL: ", res.BucketInfo.ACL)
fmt.Println("BucketInfo.Owner: ", res.BucketInfo.Owner)
fmt.Println("BucketInfo.StorageClass: ", res.BucketInfo.StorageClass)
}
刪除儲存空間
刪除儲存空間之前,必須先刪除儲存空間下的所有檔案、LiveChannel和分區上傳產生的碎片。
說明:要刪除分區上傳產生的碎片,首先使用Bucket.ListMultipartUploads列舉出所有碎片,然後使用Bucket.AbortMultipartUpload刪除這些碎片。
以下代碼用於刪除儲存空間:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("oss-cn-hangzhou-internal.aliyuncs.com", "LTAIw******Ioz4D", "I2LPGDO2SB6c5nwWyaBQFR91R2Zvll")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 刪除儲存空間。
err = client.DeleteBucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}