Bucket管理

    • Bucket名称在所有区域中具有全局唯一性,且不能修改。
    • 存储在BOS上的每个Object都必须包含在一个Bucket中。
    • 一个用户最多可创建100个Bucket,但每个Bucket中存放的Object的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。

    如下代码将Bucket的权限设置为了private。

    用户可设置的CannedACL包含三个值:privatepublic-readpublic-read-write,它们分别对应相关权限。具体内容可以参考BOS API文档 使用CannedAcl方式的权限控制

    BOS还可以实现设置指定用户对Bucket的访问权限,参考如下代码实现:

    1. // import "github.com/baidubce/bce-sdk-go/bce"
    2. // import "github.com/baidubce/bce-sdk-go/services/bos/api"
    3. // 1. 直接上传ACL文件流
    4. aclBodyStream := bce.NewBodyFromFile("<path-to-acl-file>")
    5. err := bosClient.PutBucketAcl(bucket, aclBodyStream)
    6. // 2. 直接使用ACL json字符串
    7. aclString := `{
    8. "accessControlList":[
    9. {
    10. "grantee":[{
    11. "id":"e13b12d0131b4c8bae959df4969387b8" //指定用户ID
    12. }],
    13. "permission":["FULL_CONTROL"] //指定用户权限
    14. }
    15. ]
    16. }`
    17. err := bosClient.PutBucketAclFromString(bucket, aclString)
    18. err := bosClient.PutBucketAclFromFile(bucket, "<acl-file-name>")
    19. // 4. 使用ACL struct对象设置
    20. grantUser1 := api.GranteeType{"<user-id-1>"}
    21. grantUser2 := api.GranteeType{"<user-id-2>"}
    22. grant1 := api.GrantType{
    23. Permission: []string{"FULL_CONTROL"}
    24. }
    25. grant2 := api.GrantType{
    26. Grantee: []api.GranteeType{granteUser2},
    27. Permission: []string{"READ"}
    28. }
    29. grantArr := make([]api.GranteType)
    30. grantArr = append(grantArr, grant1)
    31. grantArr = append(grantArr, grant2)
    32. args := &api.PutBucketAclArgs{grantArr}
    33. err := bosClient.PutBucketAclFromStruct(bucketName, args)
    • 通过设置referer白名单方式设置防盗链
    1. aclString := `{
    2. "accessControlList":[
    3. {
    4. "grantee":[{"id":"*"]}, //指定用户ID为全部用户
    5. "permission":["FULL_CONTROL"], //指定用户权限
    6. "condition":[{"referer": {"stringEquals": "http://allowed-domain/"}}]
    7. }
    8. ]
    9. }`
    10. err := bosClient.PutBucketAclFromString(bucket, aclString)
    • 限制客户端IP访问,只允许部分客户端IP访问
    1. aclString := `{
    2. "accessControlList":[
    3. {
    4. "grantee":[{"id":"*"]}, //指定用户ID为全部用户
    5. "condition":[{"ipAddress": ["ip-1", "ip-2"]}]
    6. }
    7. ]
    8. err := bosClient.PutBucketAclFromString(bucket, aclString)

    对于通过STS方式创建的临时访问身份,管理员也可进行专门的权限设定。

    使用BOS GO SDK设置STS临时token权限可参考如下示例:

    用户可以通过如下接口查看Bucket的访问权限,注意:Bucket的访问权限不能删除,默认为私有。

    1. result, err := bosClient.GetBucketAcl(bucketName)

    返回的结果对象的字段包含了访问权限的详细内容,具体定义如下:

    1. type GetBucketAclResult struct {
    2. AccessControlList []struct{
    3. Grantee []struct {
    4. Id string
    5. }
    6. Permission []string
    7. }
    8. Owner struct {
    9. Id string
    10. }
    11. }

    查看Bucket所属的区域

    Bucket Location即Bucket Region,百度云支持的各region详细信息可参见区域选择说明

    1. location, err := bosClient.GetBucketLocation(bucketName)

    如下代码可以新建一个Bucket:

    列举Bucket

    如下代码可以列出用户所有的Bucket:

    1. if res, err := bosClient.ListBuckets(); err != nil {
    2. fmt.Println("list buckets failed:", err)
    3. } else {
    4. fmt.Println("owner:", res.Owner)
    5. for i, b := range res.Buckets {
    6. fmt.Println("bucket", i)
    7. fmt.Println(" Name:", b.Name)
    8. fmt.Println(" Location:", b.Location)
    9. fmt.Println(" CreationDate:", b.CreationDate)
    10. }
    11. }

    如下代码可以删除一个Bucket:

    1. err := bosClient.DeleteBucket(bucketName)

    判断Bucket是否存在

    若用户需要判断某个Bucket是否存在,则如下代码可以做到:

    1. exists, err := bosClient.DoesBucketExist(bucketName)
    2. if err == nil && exists {
    3. fmt.Println("Bucket exists")
    4. } else {
    5. }