Bucket管理
Bucket既是BOS上的命名空间,也是计费、权限控制、日志记录等高级功能的管理实体。
- Bucket名称在所有区域中具有全局唯一性,且不能修改。
说明:
百度智能云目前开放了多区域支持,请参考区域选择说明 。 目前支持“华北-北京”、“华南-广州”和“华东-苏州”三个区域。北京区域:
http://bj.bcebos.com,广州区域:http://gz.bcebos.com,苏州区域:http://su.bcebos.com。
- 存储在BOS上的每个Object都必须包含在一个Bucket中。
- 一个用户最多可创建100个Bucket,但每个Bucket中存放的Object的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。
Bucket权限管理
设置Bucket的访问权限
如下代码将Bucket的权限设置为了private。
1err := bosClient.PutBucketAclFromCanned(bucketName, "private")
用户可设置的CannedACL包含三个值:private 、public-read 、public-read-write,它们分别对应相关权限。具体内容可以参考BOS API文档 使用CannedAcl方式的权限控制。
设置指定用户对Bucket的访问权限
BOS还可以实现设置指定用户对Bucket的访问权限,参考如下代码实现:
1// import "github.com/baidubce/bce-sdk-go/bce"
2// import "github.com/baidubce/bce-sdk-go/services/bos/api"
3
4// 1. 直接上传ACL文件流
5aclBodyStream := bce.NewBodyFromFile("<path-to-acl-file>")
6err := bosClient.PutBucketAcl(bucket, aclBodyStream)
7
8// 2. 直接使用ACL json字符串
9aclString := `{
10 "accessControlList":[
11 {
12 "grantee":[{
13 "id":"e13b12d0131b4c8bae959df4969387b8" //指定用户ID
14 }],
15 "permission":["FULL_CONTROL"] //指定用户权限
16 }
17 ]
18}`
19err := bosClient.PutBucketAclFromString(bucket, aclString)
20
21// 3. 使用ACL文件
22err := bosClient.PutBucketAclFromFile(bucket, "<acl-file-name>")
23
24// 4. 使用ACL struct对象设置
25grantUser1 := api.GranteeType{"<user-id-1>"}
26grantUser2 := api.GranteeType{"<user-id-2>"}
27grant1 := api.GrantType{
28 Grantee: []api.GranteeType{grantUser1},
29 Permission: []string{"FULL_CONTROL"},
30}
31grant2 := api.GrantType{
32 Grantee: []api.GranteeType{granteUser2},
33 Permission: []string{"READ"},
34}
35grantArr := make([]api.GranteeType, 0)
36grantArr = append(grantArr, grant1)
37grantArr = append(grantArr, grant2)
38args := &api.PutBucketAclArgs{grantArr}
39err := bosClient.PutBucketAclFromStruct(bucketName, args)
注意: Permission中的权限设置包含三个值:
READ、WRITE、FULL_CONTROL,它们分别对应相关权限。具体内容可以参考BOS API文档 上传ACL文件方式的权限控制。 ACL规则比较复杂,直接编辑ACL的文件或JSON字符串比较困难,因此提供了第四种方式方便使用代码创建ACL规则。
设置更多Bucket访问权限
-
通过设置referer白名单方式设置防盗链
Go1aclString := `{ 2 "accessControlList":[ 3 { 4 "grantee":[{"id":"*"]}, //指定用户ID为全部用户 5 "permission":["FULL_CONTROL"], //指定用户权限 6 "condition":[{"referer": {"stringEquals": "http://allowed-domain/"}}] 7 } 8 ] 9}` 10err := bosClient.PutBucketAclFromString(bucket, aclString) -
限制客户端IP访问,只允许部分客户端IP访问
Go1aclString := `{ 2 "accessControlList":[ 3 { 4 "grantee":[{"id":"*"]}, //指定用户ID为全部用户 5 "permission":["READ"], //指定用户权限 6 "condition":[{"ipAddress": ["ip-1", "ip-2"]}] 7 } 8 ] 9}` 10err := bosClient.PutBucketAclFromString(bucket, aclString)
设置STS临时token权限
对于通过STS方式创建的临时访问身份,管理员也可进行专门的权限设定。
STS的简介及设置临时权限的方式可参见临时授权访问。
使用BOS GO SDK设置STS临时token权限可参考如下示例:
1// import "github.com/baidubce/bce-sdk-go/services/sts"
2
3AK, SK := <your-access-key-id>, <your-secret-access-key>
4
5stsClient, err := sts.NewClient(AK, SK)
6
7//获取有效期为300秒临时STS token
8sts, err := stsClient.GetSessionToken(300, "")
用户可通过获取的STS临时token权限构造BOS Client,在临时token权限有效期内,可调用权限范围内的操作。
1// import "github.com/baidubce/bce-sdk-go/services/sts"
2
3AK, SK := <your-access-key-id>, <your-secret-access-key>
4ENDPOINT := "bj.bcebos.com"
5
6bosClientTemp, err := bos.NewStsClient(AK, SK, 180)
7
8// 在有效期180s内,可通过bosClientTemp调用权限范围内的API操作
查看Bucket的访问权限
用户可以通过如下接口查看Bucket的访问权限,注意:Bucket的访问权限不能删除,默认为私有。
1result, err := bosClient.GetBucketAcl(bucketName)
返回的结果对象的字段包含了访问权限的详细内容,具体定义如下:
1type 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详细信息可参见区域选择说明。
如下代码可以获取该Bucket的Location信息:
1location, err := bosClient.GetBucketLocation(bucketName)
新建Bucket
如下代码可以新建一个Bucket:
1// 新建Bucket的接口为PutBucket,需指定Bucket名称
2if loc, err := bosClient.PutBucket(<your-bucket-name>); err != nil {
3 fmt.Println("create bucket failed:", err)
4} else {
5 fmt.Println("create bucket success at location:", loc)
6}
注意: 由于Bucket的名称在所有区域中是唯一的,所以需要保证bucketName不与其他所有区域上的Bucket名称相同。
Bucket的命名有以下规范:
- 只能包括小写字母,数字,短横线(-)。
- 必须以小写字母或者数字开头。
- 长度必须在4-63字节之间。
- 新建lcc bucket
go sdk支持新建lcc bucket,用户可以在构造api.PutBucketArgs结构体,填入LccLocation,调用PutBucketWithArgs接口创建lcc bucket,api.PutBucketArgs具体参数如下:
| 参数 | 类型 | 说明 |
|---|---|---|
| TagList | string | Bucket标签 |
| EnableMultiAz | bool | 是否开启多AZ |
| LccLocation | string | lcc id,用于创建lcc bucket到特定的lcc集群 |
| EnableDedicated | bool | 用于控制控制台开启lcc识别白名单 |
如下代码可以新建一个lcc Bucket:
1//调用PutBucketWithArgs创建lcc bucket,需指定Bucket名称和lcc id
2putBucketArgs := &api.PutBucketArgs{}
3putBucketArgs.LccLocation = "<lcc id>"
4putBucketArgs.EnableDedicated = true
5if loc, err := bosClient.PutBucketWithArgs(<your-bucket-name>, putBucketArgs); err != nil {
6 fmt.Println("create lcc bucket failed:", err)
7} else {
8 fmt.Println("create lcc bucket success at location:", loc)
9}
列举Bucket
如下代码可以列出用户所有的Bucket:
1if 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
如下代码可以删除一个Bucket:
1err := bosClient.DeleteBucket(bucketName)
注意:
- 在删除前需要保证此Bucket下的所有Object已经已被删除,否则会删除失败。
- 在删除前确认该Bucket没有开通跨区域复制,不是跨区域复制规则中的源Bucket或目标Bucket,否则不能删除。
判断Bucket是否存在
若用户需要判断某个Bucket是否存在,则如下代码可以做到:
1exists, err := bosClient.DoesBucketExist(bucketName)
2if err == nil && exists {
3 fmt.Println("Bucket exists")
4} else {
5 fmt.Println("Bucket not exists")
6}
注意: 如果Bucket不为空(即Bucket中有Object存在),则Bucket无法被删除,必须清空Bucket后才能成功删除。
开启Bucket访问日志
用户可通过 PutBucketLogging 接口为指定Bucket开启访问日志功能,并指定存储日志的BUcket和访问日志的文件前缀。访问日志的规则请参见日志命名规则和日志格式。
代码示例如下:
1 bucket := "YOUR-BUCKET"
2 targetBucket := "TARGET-BUCKET-STORE-LOGGING"
3 targetPrefix := "TARGET-PREFIX-FOR-LOGGING"
4 bucketLoggingArgs := &api.PutBucketLoggingArgs{
5 TargetBucket: targetBucket,
6 TargetPrefix: targetPrefix,
7 }
8 // 将bucket logging参数转为json格式
9 bucketLoggingJson, err := json.Marshal(bucketLoggingArgs)
10 if err != nil {
11 fmt.Printf("json marshal failed: %s\n", err)
12 return
13 } else {
14 fmt.Printf("bucket logging json string: %s\n", bucketLoggingJson)
15 }
16 // 构造body
17 body, err := bce.NewBodyFromBytes(bucketLoggingJson)
18 if err != nil {
19 fmt.Printf("new bce body failed: %s\n", err)
20 return
21 }
22 // 开启Bucket访问日志功能
23 err = bosClient.PutBucketLogging(bucket, body)
24 if err != nil {
25 fmt.Printf("put bucket logging failed: %s\n", err)
26 } else {
27 fmt.Printf("put bucket logging success.\n")
28 }
获取Bucket访问日志功能配置
用户可通过 GetBucketLogging接口获取指定Bucket的访问日志功能的配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 bucketLoggingRes, err := bosClient.GetBucketLogging(bucket)
3 if err != nil {
4 fmt.Printf("get bucket logging failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket logging: %+v\n", bucketLoggingRes)
7 }
关闭Bucket访问日志功能
用户可通过 DeleteBucketLogging 接口关闭指定Bucket的访问日志功能,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketLogging(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket logging failed: %s\n", err)
5 }
设置Bucket版本控制
用户可通过 PurBucketVersioning 接口设置指定Bucket的版本控制状态,Bucket包括未开启(notEnabled)、开启(enabled)或者暂停(suspended)三种版本控制状态。默认情况下Bucket处于未开启版本控制状态。代码示例如下:
1 bucket := "YOUR-BUCKET"
2 // 开启版本控制
3 args := &api.BucketVersioningArgs{
4 Status: "enabled",
5 }
6 err := bosClient.PutBucketVersioning(bucket, args)
7 if err != nil {
8 fmt.Printf("put bucket versioning failed: %s\n", err)
9 return
10 } else {
11 fmt.Printf("put bucket versioning success.\n")
12 }
13 // 暂停版本控制
14 args.Status = "suspended"
15 err = bosClient.PutBucketVersioning(bucket, args)
16 if err != nil {
17 fmt.Printf("put bucket versioning failed: %s\n", err)
18 return
19 } else {
20 fmt.Printf("put bucket versioning success.\n")
21 }
获取Bucket版本控制状态
用户可使用 GetBucketVersioning 接口获取指定Bucket的版本控制状态。代码示例如下:
1 bucket := "YOUR-BUCKET"
2 res, err = bosClient.GetBucketVersioning(bucket)
3 if err != nil {
4 fmt.Printf("get bucket versioning failed: %s\n", err)
5 return
6 } else {
7 fmt.Printf("get bucket versioning success: %+v\n", res)
8 }
Bucket清单管理
创建清单任务
用户可通过 PutBucketInventory 接口为指定Bucket创建清单任务,关于该接口的使用条件和参数说明请参考 PutBucketInventory。
代码示例如下:
1 bucket := "Your-Bucket"
2 inventoryConfigId := "Your-Inventory-Config-ID"
3 targetBucket := "Target-Bucket"
4 targetPrefix := "Your-Target-Prefix"
5
6 // 设置清单任务配置参数
7 args := &api.PutBucketInventoryArgs{
8 Rule: api.BucketInventoryRule{
9 Id: inventoryConfigId,
10 Status: api.STATUS_ENABLED,
11 Resource: []string{
12 bucket + "/prefix1", bucket + "/prefix2",
13 },
14 Schedule: api.INVENTORY_SCHEDULE_MONTHLY,
15 Destination: api.InventoryDestination{
16 TargetBucket: targetBucket,
17 TargetPrefix: targetPrefix,
18 Format: api.INVENTORY_FILE_FORMAT_CSV,
19 },
20 MonthlyDate: 20,
21 IncObjectVersions: api.INVENTORY_OBJECT_VERSIONS_CURRENT,
22 },
23 }
24 err := bosClient.PutBucketInventory(bucket, args)
25 if err != nil {
26 fmt.Printf("put bucket inventory failed: %s\n", err)
27 return
28 } else {
29 fmt.Printf("put bucket inventory success.\n")
30 }
获取清单任务
用户可通过 GetBucketInventory 接口获取指定Bucket的某个清单任务配置,接口描述和参数说明可参考 GetBucketInventory。
代码示例如下:
1 bucket := "Your-Bucket"
2 inventoryConfigId := "Your-Inventory-Config-ID"
3
4 res, err := bosClient.GetBucketInventory(bucket, inventoryConfigId)
5 if err != nil {
6 fmt.Printf("get bucket inventory failed: %s\n", err)
7 return
8 } else {
9 fmt.Printf("get bucket inventory success: %+v\n", res)
10 }
列举清单任务
用户可通过 ListBucketInventory 接口获取指定Bucket的所有清单任务配置,接口描述和参数说明可参考 ListBucketInventory。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 listRes, err := bosClient.ListBucketInventory(bucket)
4 if err != nil {
5 fmt.Printf("list bucket inventory failed: %s\n", err)
6 return
7 } else {
8 fmt.Printf("list bucket inventory success: %+v\n", listRes)
9 }
删除清单任务
用户可通过 DeleteBucketInventory 接口删除指定Bucket的某个清单任务配置,接口描述和参数说明可参考 DeleteBucketInventory。
代码示例如下:
1 bucket := "Your-Bucket"
2 inventoryConfigId := "Your-Inventory-Config-ID"
3
4 err := bosClient.DeleteBucketInventory(bucket, args.Rule.Id)
5 if err != nil {
6 fmt.Printf("delete bucket inventory failed: %s\n", err)
7 return
8 } else {
9 fmt.Printf("delete bucket inventory success.\n")
10 }
Bucket配额管理
设置Bucket配额
用户可通过 PutBucketQuota 接口为指定Bucket设置容量上限及object个数上限,接口描述和参数说明可参考 PutBucketQuota。
代码示例如下:
1 bucket := "Your-Bucket"
2 // 设置配额参数:Bucket容量上限和object个数上限
3 args = &api.BucketQuotaArgs{
4 MaxObjectCount: 300 * 10000,
5 MaxCapacityMegaBytes: 1024 * 1024 * 1024 * 1024,
6 }
7 err := bosClient.PutBucketQuota(bucket, args)
8 if err != nil {
9 fmt.Printf("put bucket quota failed: %s\n", err)
10 } else {
11 fmt.Printf("put quota quota success.\n")
12 }
获取Bucket配额
用户可通过 GetBucketQuota 接口获取为指定Bucket设置的配额上限,详细接口描述和参数说明可参考 GetBucketQuota。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 args, err := bosClient.GetBucketQuota(bucket)
4 if err != nil {
5 fmt.Printf("get bucket quota failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket quota success: %+v\n", args)
8 }
删除Bucket配额
用户可通过 GetBucketQuota 接口删除指定Bucket的配额设置,详细接口描述可参考 DeleteBucketQuota。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 err := bosClient.DeleteBucketQuota(bucket)
4 if err != nil {
5 fmt.Printf("delete bucket quota failed: %s\n", err)
6 } else {
7 fmt.Printf("delete bucket quota success\n")
8 }
请求者付费功能
创建请求者付费功能
用户可通过 PutBucketRequestPayment 接口对指定Bucket创建请求者付费功能,接口使用条件和参数说明可参考 PutBucketRequestPayment。
代码示例如下:
1 bucket := "Your-Bucket"
2 args := &api.RequestPaymentArgs{
3 RequestPayment: api.REQUEST_PAYMENT_REQUESTER,
4 }
5
6 err := bosClient.PutBucketRequestPayment(bucket, args)
7 if err != nil {
8 fmt.Printf("put bucket request payment failed: %s\n", err)
9 } else {
10 fmt.Printf("put bucket request payment success: %+v\n", args)
11 }
获取请求者计费规则
用户可通过 GetBucketRequestPayment 接口获取指定Bucket的请求者计费规则,接口使用条件可参考 GetBucketRequestPayment。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 res, err := bosClient.GetBucketRequestPayment(bucket)
4 if err != nil {
5 fmt.Printf("get bucket request payment failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket request payment success: %+v\n", res)
8 }
合规保留功能
创建合规保留策略
用户可通过 InitBucketObjectLock 接口为指定Bucket创建合规保留策略,接口使用条件和参数说明可参考 InitBucketObjectLock。
代码示例如下:
1 bucket := "Your-Bucket"
2 initArgs := &api.InitBucketObjectLockArgs{
3 RetentionDays: 10,
4 }
5
6 err := bosClient.InitBucketObjectLock(bucket, initArgs)
7 if err != nil {
8 fmt.Printf("Init bucket object lock failed: %s\n", err)
9 } else {
10 fmt.Printf("Init bucket object lock success.\n")
11 }
获取合规保留配置信息
用户可通过 GetBucketObjectLock 接口获取指定Bucket的合规保留配置信息,接口使用条件和参数说明可参考 GetBucketObjectLock。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 res, err := bosClient.GetBucketObjectLock(bucket)
4 if err != nil {
5 fmt.Printf("get bucket object lock failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket object lock success: %+v\n", res)
8 }
删除合规保留策略
当合规保留策略处于IN_PROGRESS和EXPIRED状态时,用户可通过 DeleteBucketObjectLock 接口删除指定Bucket的合规保留策略,接口使用条件和参数说明可参考 DeleteBucketObjectLock。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 err := bosClient.DeleteBucketObjectLock(bucket)
4 if err != nil {
5 fmt.Printf("Delete bucket object lock failed: %s\n", err)
6 } else {
7 fmt.Printf("Delete bucket object lock success.\n")
8 }
锁定合规保留策略
用户可通过 CompleteBucketObjectLock 接口将指定Bucket的合规保留策略立即锁定,变成LOCKED锁定状态,当合规保留策略处于LOCKED锁定时,任何人不可删除该策略。接口使用条件和参数说明可参考 CompleteBucketObjectLock。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 err := bosClient.CompleteBucketObjectLock(bucket)
4 if err != nil {
5 fmt.Printf("Complete bucket object lock failed: %s\n", err)
6 } else {
7 fmt.Printf("Complete bucket object lock success.\n")
8 }
延长合规保留周期
用户可通过 ExtendBucketObjectLock 接口延长指定Bucket的合规保留策略的保护周期,接口使用条件和参数说明可参考 ExtendBucketObjectLock。
代码示例如下:
1 bucket := "Your-Bucket"
2 exArgs := &api.ExtendBucketObjectLockArgs{
3 ExtendRetentionDays: 20,
4 }
5
6 err = bosClient.ExtendBucketObjectLock(bucket, exArgs)
7 if err != nil {
8 fmt.Printf("Extend bucket object lock failed: %s\n", err)
9 } else {
10 fmt.Printf("Extend bucket object lock success.\n")
11 }
跨域访问功能
设置跨域访问规则
用户可通过 PutBucketCors 接口为指定Bucket的一个跨域共享访问规则,如果原规则存在则覆盖原规则。接口使用条件和参数说明可参考 PutBucketCors。
通过数据结构的参数格式设置跨域共享访问规则的代码示例如下:
1 bucket := "Your-Bucket"
2 args := &api.PutBucketCorsArgs{
3 CorsConfiguration: []api.BucketCORSType{
4 {
5 AllowedOrigins: []string{
6 "http://www.example.com", "www.example2.com",
7 },
8 AllowedMethods: []string{
9 "GET", "HEAD", "DELETE",
10 },
11 AllowedHeaders: []string{
12 "Authorization", "x-bce-test", "x-bce-test2",
13 },
14 AllowedExposeHeaders: []string{
15 "user-custom-expose-header",
16 },
17 MaxAgeSeconds: 3600,
18 },
19 {
20 AllowedOrigins: []string{
21 "http://www.baidu.com",
22 },
23 AllowedMethods: []string{
24 "GET", "HEAD", "DELETE",
25 },
26 AllowedHeaders: []string{
27 "*",
28 },
29 AllowedExposeHeaders: []string{
30 "user-custom-expose-header",
31 },
32 MaxAgeSeconds: 1800,
33 },
34 },
35 }
36
37 err := bosClient.PutBucketCorsFromStruct(bucket, args)
38 if err != nil {
39 fmt.Printf("put object cors failed: %s\n", err)
40 } else {
41 fmt.Printf("put object cors success.\n")
42 }
通过json格式的文件或字符串设置跨域共享访问规则,json格式的跨域共享访问规则配置示例如下:
1{
2"corsConfiguration": [{
3 "allowedOrigins": [
4 "http://www.example.com", "www.example2.com"
5 ],
6 "allowedMethods": [
7 "GET", "HEAD", "DELETE"
8 ],
9 "allowedHeaders": [
10 "Authorization", "x-bce-test", "x-bce-test2"
11 ],
12 "allowedExposeHeaders": [
13 "user-custom-expose-header"
14 ],
15 "maxAgeSeconds": 3600
16 },
17 {
18 "allowedOrigins": [
19 "http://www.baidu.com"
20 ],
21 "allowedMethods": [
22 "GET", "HEAD", "DELETE"
23 ],
24 "allowedHeaders": [ "*" ],
25 "allowedExposeHeaders": [
26 "user-custom-expose-header"
27 ],
28 "maxAgeSeconds": 1800
29 }]
30}
代码示例如下:
1 bucket := "Your-Bucket"
2 jsonStr := `Your Bucket Cors Config Json String`
3
4 // 通过json格式字符串传参
5 err := bosClient.PutBucketCorsFromString(bucket, jsonStr)
6 if err != nil {
7 fmt.Printf("put object cors failed: %s\n", err)
8 } else {
9 fmt.Printf("put object cors success.\n")
10 }
11
12 // 通过json格式文件传参
13 confFile := "Your Bucket Cors Config Json File"
14 err = bosClient.PutBucketCorsFromFile(bucket, confFile)
15 if err != nil {
16 fmt.Printf("put bucket cors failed: %s\n", err)
17 } else {
18 fmt.Printf("put bucket cors success.\n")
19 }
获取跨域访问配置
用户可通过 GetBucketCors 接口获取指定Bucket的跨域共享访问规则。接口使用条件和参数说明可参考 GetBucketCors。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 res, err := bosClient.GetBucketCors(bucket)
4 if err != nil {
5 fmt.Printf("get bucket cors failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket cors success: %+v\n", res)
8 }
删除跨域访问配置
用户可通过 DeleteBucketCors 接口获取指定Bucket的跨域共享访问规则。接口使用条件和参数说明可参考 DeleteBucketCors。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 err := bosClient.DeleteBucketCors(bucket)
4 if err != nil {
5 fmt.Printf("delete bucket cors failed: %s\n", err)
6 } else {
7 fmt.Printf("delete bucket cors success.\n")
8 }
生命周期功能
设置生命周期规则
用户可通过 PutBucketLifecycle 接口为指定Bucket的生命周期规则。接口使用条件和参数说明可参考 PutBucketLifecycle。
通过json格式字符串设置生命周期规则的代码示例如下:
1 bucket := "Your-Bucket"
2 lifecycleRule := `{
3 "rule":[
4 {
5 "id": "rule-id",
6 "status": "enabled",
7 "resource": [ "Your-Bucket/prefix/*" ],
8 "condition": {
9 "time": { "dateGreaterThan": "$(lastModified)+P3D" },
10 "objectSize": { "minSize": 1024, "maxSize": 2048 },
11 "tag": { "key1": "value1", "key2": "value2" }
12 },
13 "action": { "name": "DeleteObject" },
14 "not": {
15 "resource": "Your-Bucket/prefix/prefix1*",
16 "tag": {
17 "key3": "value3"
18 }
19 }
20 },
21 {
22 "id": "rule-id2",
23 "status": "enabled",
24 "resource": [ "Your-Bucket/*" ],
25 "condition": {
26 "time": { "dateGreaterThan": "$(lastModified)+P5D" },
27 "tag": { "key1": "value1", "key2": "value2" }
28 },
29 "action": {
30 "name": "NonCurrentVersionDeleteObject"
31 }
32 }
33 ]
34 }`
35
36 err := bosClient.PutBucketLifecycleFromString(bucket, lifecycleRule)
37 if err != nil {
38 fmt.Printf("PutBucketLifecycleFromString failed: %s\n", err.Error())
39 } else {
40 fmt.Printf("PutBucketLifecycleFromString success\n")
41 }
获取生命周期规则
用户可通过 GetBucketLifecycle 接口获取指定Bucket的生命周期规则。接口使用条件和参数说明可参考 GetBucketLifecycle。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 res, err := bosClient.GetBucketLifecycle(bucket)
4 if err != nil {
5 fmt.Printf("GetBucketLifecycle failed: %s\n", err.Error())
6 } else {
7 fmt.Printf("GetBucketLifecycle success: %+v\n", res)
8 }
删除生命周期规则
用户可通过 DeleteBucketLifecycle 接口删除指定Bucket的生命周期规则。接口使用条件和参数说明可参考 DeleteBucketLifecycle。
代码示例如下:
1 bucket := "Your-Bucket"
2
3 err := bosClient.DeleteBucketLifecycle(bucket)
4 if err != nil {
5 fmt.Printf("DeleteBucketLifecycle failed: %s\n", err.Error())
6 } else {
7 fmt.Printf("DeleteBucketLifecycle success\n")
8 }
Bucket标签管理
设置Bucket标签
用户可通过 PutBucketTag 接口为指定Bucket设置标签,接口描述和参数说明可参考 PutBucketTagging。
代码示例如下:
1 // 初始化 bos client
2 AK, SK := "ACCESS_KEY", "SECRET_KEY"
3 ENDPOINT := "bj.bcebos.com"
4 bosclient, err := bos.NewClient(AK, SK, ENDPOINT)
5 if err != nil {
6 fmt.Printf("new client failed: %s\n", err)
7 return
8 }
9
10 // put bucket tag
11 bucket := "YOUR_BUCKET"
12 putBucketTagArgs := &api.PutBucketTagArgs{
13 Tags: []api.Tag{
14 {TagKey: "key1", TagValue: "value1"},
15 {TagKey: "key2", TagValue: "value2"},
16 },
17 }
18 err = bosclient.PutBucketTag(bucket, putBucketTagArgs)
19 if err != nil {
20 fmt.Println(err)
21 }
获取Bucket标签
用户可通过 GetBucketTag 接口获取为指定Bucket的标签信息,详细接口描述和参数说明可参考 GetBucketTagging。
代码示例如下:
1 // 初始化 bos client
2 AK, SK := "ACCESS_KEY", "SECRET_KEY"
3 ENDPOINT := "bj.bcebos.com"
4 bosclient, err := bos.NewClient(AK, SK, ENDPOINT)
5 if err != nil {
6 fmt.Printf("new client failed: %s\n", err)
7 return
8 }
9
10 // get bucket tag
11 bucket := "YOUR_BUCKET"
12 getBucketTagResult, err := bosclient.GetBucketTag(bucket)
13 if err != nil {
14 fmt.Printf("get bucket tag failed: %s\n", err)
15 } else {
16 fmt.Printf("get bucket tag result: %+v\n", getBucketTagResult)
17 }
删除Bucket标签
用户可通过 GetBucketTag 接口删除指定Bucket的配额设置,详细接口描述可参考 DeleteBucketTagging。
代码示例如下:
1 // 初始化 bos client
2 AK, SK := "ACCESS_KEY", "SECRET_KEY"
3 ENDPOINT := "bj.bcebos.com"
4 bosclient, err := bos.NewClient(AK, SK, ENDPOINT)
5 if err != nil {
6 fmt.Printf("new client failed: %s\n", err)
7 return
8 }
9
10 // delete bucket tag
11 bucket := "YOUR_BUCKET"
12 err = bosclient.DeleteBucketTag(bucket)
13 if err != nil {
14 fmt.Printf("delete bucket tag failed: %s\n", err)
15 } else {
16 fmt.Printf("delete bucket tag success.\n")
17 }
判断Bucket是否存在(HeadBucket)
除 DoesBucketExist 外,SDK 还提供 HeadBucket 接口,用于直接向服务端发送 HEAD 请求判断 Bucket 是否存在及当前用户是否具有访问权限。若 Bucket 不存在或无权访问,会返回相应的错误。
代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.HeadBucket(bucket)
3 if err != nil {
4 fmt.Printf("head bucket failed: %s\n", err)
5 } else {
6 fmt.Printf("head bucket success, bucket exists and accessible.\n")
7 }
Bucket存储类型管理
BOS支持为Bucket设置默认存储类型,Bucket中新建Object未指定存储类型时,将采用该Bucket的默认存储类型。可选的存储类型包括标准存储(STANDARD)、低频存储(STANDARD_IA)、归档存储(ARCHIVE)、冷存储(COLD)等,具体请参考 BOS 存储类型文档。
设置Bucket存储类型
用户可通过 PutBucketStorageclass 接口为指定 Bucket 设置默认存储类型,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 // 设置默认存储类型为标准存储
3 err := bosClient.PutBucketStorageclass(bucket, "STANDARD")
4 if err != nil {
5 fmt.Printf("put bucket storage class failed: %s\n", err)
6 } else {
7 fmt.Printf("put bucket storage class success.\n")
8 }
获取Bucket存储类型
用户可通过 GetBucketStorageclass 接口获取指定 Bucket 的默认存储类型,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 storageClass, err := bosClient.GetBucketStorageclass(bucket)
3 if err != nil {
4 fmt.Printf("get bucket storage class failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket storage class success: %s\n", storageClass)
7 }
Bucket加密管理
BOS支持为Bucket设置服务端加密,开启后Bucket中新上传的Object会自动使用指定的加密算法进行加密存储。
设置Bucket加密
用户可通过 PutBucketEncryption 接口为指定Bucket设置加密配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 // 设置加密算法,支持 "AES256"
3 err := bosClient.PutBucketEncryption(bucket, "AES256")
4 if err != nil {
5 fmt.Printf("put bucket encryption failed: %s\n", err)
6 } else {
7 fmt.Printf("put bucket encryption success.\n")
8 }
获取Bucket加密配置
用户可通过 GetBucketEncryption 接口获取指定Bucket的加密配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 algorithm, err := bosClient.GetBucketEncryption(bucket)
3 if err != nil {
4 fmt.Printf("get bucket encryption failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket encryption algorithm: %s\n", algorithm)
7 }
删除Bucket加密配置
用户可通过 DeleteBucketEncryption 接口删除指定Bucket的加密配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketEncryption(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket encryption failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket encryption success.\n")
7 }
静态网站托管功能
BOS支持将Bucket配置为静态网站托管模式,配置后可直接通过Bucket域名访问静态网站内容。
设置静态网站托管
用户可通过 SimplePutBucketStaticWebsite 接口简单设置Bucket的静态网站托管配置,指定首页文件和404页面文件名,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 // 设置首页文件为index.html,404页面为404.html
3 err := bosClient.SimplePutBucketStaticWebsite(bucket, "index.html", "404.html")
4 if err != nil {
5 fmt.Printf("put bucket static website failed: %s\n", err)
6 } else {
7 fmt.Printf("put bucket static website success.\n")
8 }
也可通过结构体方式设置:
1 // import "github.com/baidubce/bce-sdk-go/services/bos/api"
2 bucket := "YOUR-BUCKET"
3 args := &api.PutBucketStaticWebsiteArgs{
4 Index: "index.html",
5 NotFound: "404.html",
6 }
7 err := bosClient.PutBucketStaticWebsiteFromStruct(bucket, args)
8 if err != nil {
9 fmt.Printf("put bucket static website failed: %s\n", err)
10 } else {
11 fmt.Printf("put bucket static website success.\n")
12 }
获取静态网站托管配置
用户可通过 GetBucketStaticWebsite 接口获取指定Bucket的静态网站托管配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 res, err := bosClient.GetBucketStaticWebsite(bucket)
3 if err != nil {
4 fmt.Printf("get bucket static website failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket static website success: %+v\n", res)
7 }
删除静态网站托管配置
用户可通过 DeleteBucketStaticWebsite 接口删除指定Bucket的静态网站托管配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketStaticWebsite(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket static website failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket static website success.\n")
7 }
跨区域复制功能
BOS支持跨区域复制(Cross-Region Replication),可将源Bucket中的Object自动、异步地复制到目标Bucket,实现数据的异地容灾备份。每条复制规则通过唯一的replicationRuleId(由 [0-9 A-Z a-z _ -] 组成)进行标识。
设置跨区域复制规则
用户可通过 PutBucketReplication 系列接口为指定Bucket设置跨区域复制规则,支持通过 body 流、json 文件、json 字符串、结构体四种方式设置。
通过结构体方式设置的代码示例如下:
1 // import "github.com/baidubce/bce-sdk-go/services/bos/api"
2 bucket := "YOUR-BUCKET"
3 replicationRuleId := "your-replication-rule-id"
4 args := &api.PutBucketReplicationArgs{
5 Id: replicationRuleId,
6 Status: "enabled",
7 Resource: []string{bucket + "/*"},
8 // 是否同步删除操作
9 ReplicateDeletes: "enabled",
10 // 复制的目标Bucket及存储类型
11 Destination: &api.BucketReplicationDescriptor{
12 Bucket: "TARGET-BUCKET",
13 StorageClass: "STANDARD",
14 Prefix: "prefix/",
15 },
16 // 是否复制历史数据
17 ReplicateHistory: &api.BucketReplicationDescriptor{},
18 }
19 err := bosClient.PutBucketReplicationFromStruct(bucket, args, replicationRuleId)
20 if err != nil {
21 fmt.Printf("put bucket replication failed: %s\n", err)
22 } else {
23 fmt.Printf("put bucket replication success.\n")
24 }
也可通过 json 字符串或 json 文件方式设置:
1 // 通过json字符串设置
2 err := bosClient.PutBucketReplicationFromString(bucket, jsonStr, replicationRuleId)
3
4 // 通过json文件设置
5 err = bosClient.PutBucketReplicationFromFile(bucket, "conf-file.json", replicationRuleId)
获取跨区域复制规则
用户可通过 GetBucketReplication 接口获取指定Bucket的某条跨区域复制规则,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 replicationRuleId := "your-replication-rule-id"
3 res, err := bosClient.GetBucketReplication(bucket, replicationRuleId)
4 if err != nil {
5 fmt.Printf("get bucket replication failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket replication success: %+v\n", res)
8 }
列举跨区域复制规则
用户可通过 ListBucketReplication 接口获取指定Bucket的所有跨区域复制规则,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 listRes, err := bosClient.ListBucketReplication(bucket)
3 if err != nil {
4 fmt.Printf("list bucket replication failed: %s\n", err)
5 } else {
6 fmt.Printf("list bucket replication success: %+v\n", listRes)
7 }
获取跨区域复制进度
用户可通过 GetBucketReplicationProgress 接口获取指定Bucket某条复制规则的复制进度,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 replicationRuleId := "your-replication-rule-id"
3 res, err := bosClient.GetBucketReplicationProgress(bucket, replicationRuleId)
4 if err != nil {
5 fmt.Printf("get bucket replication progress failed: %s\n", err)
6 } else {
7 fmt.Printf("get bucket replication progress success: %+v\n", res)
8 }
删除跨区域复制规则
用户可通过 DeleteBucketReplication 接口删除指定Bucket的某条跨区域复制规则,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 replicationRuleId := "your-replication-rule-id"
3 err := bosClient.DeleteBucketReplication(bucket, replicationRuleId)
4 if err != nil {
5 fmt.Printf("delete bucket replication failed: %s\n", err)
6 } else {
7 fmt.Printf("delete bucket replication success.\n")
8 }
版权保护功能
BOS支持为Bucket下指定的资源开启版权保护,开启后被保护的资源无法被删除或覆盖。
设置版权保护
用户可通过 PutBucketCopyrightProtection 接口设置指定Bucket的版权保护资源,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 // 支持传入多个资源前缀
3 err := bosClient.PutBucketCopyrightProtection(bucket, bucket+"/prefix1/*", bucket+"/prefix2/*")
4 if err != nil {
5 fmt.Printf("put bucket copyright protection failed: %s\n", err)
6 } else {
7 fmt.Printf("put bucket copyright protection success.\n")
8 }
获取版权保护配置
用户可通过 GetBucketCopyrightProtection 接口获取指定Bucket的版权保护配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 resources, err := bosClient.GetBucketCopyrightProtection(bucket)
3 if err != nil {
4 fmt.Printf("get bucket copyright protection failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket copyright protection success: %+v\n", resources)
7 }
删除版权保护配置
用户可通过 DeleteBucketCopyrightProtection 接口删除指定Bucket的版权保护配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketCopyrightProtection(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket copyright protection failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket copyright protection success.\n")
7 }
Bucket回收站功能
BOS支持为Bucket开启回收站,开启后被删除的Object会被移动到回收站目录,可在保留期内恢复。
开启Bucket回收站
用户可通过 PutBucketTrash 接口为指定Bucket开启回收站功能并指定回收站目录,代码示例如下:
1 // import "github.com/baidubce/bce-sdk-go/services/bos/api"
2 bucket := "YOUR-BUCKET"
3 trashReq := api.PutBucketTrashReq{
4 TrashDir: ".trash",
5 }
6 err := bosClient.PutBucketTrash(bucket, trashReq)
7 if err != nil {
8 fmt.Printf("put bucket trash failed: %s\n", err)
9 } else {
10 fmt.Printf("put bucket trash success.\n")
11 }
获取Bucket回收站配置
用户可通过 GetBucketTrash 接口获取指定Bucket的回收站配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 res, err := bosClient.GetBucketTrash(bucket)
3 if err != nil {
4 fmt.Printf("get bucket trash failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket trash success, trashDir: %s\n", res.TrashDir)
7 }
关闭Bucket回收站
用户可通过 DeleteBucketTrash 接口关闭指定Bucket的回收站功能,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketTrash(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket trash failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket trash success.\n")
7 }
事件通知功能
BOS支持为Bucket配置事件通知规则,当Bucket中的Object发生指定事件(如上传、删除等)时,BOS会将事件推送至指定的回调地址或CFC函数。
设置事件通知规则
用户可通过 PutBucketNotification 接口为指定Bucket设置事件通知规则,请求参数结构如下:
| 参数 | 类型 | 说明 |
|---|---|---|
| Id | string | 规则ID,Bucket内唯一 |
| Name | string | 规则名称 |
| AppId | string | 关联的应用ID |
| Status | string | 规则状态,enabled 或 disabled |
| Resources | []string | 规则生效的资源,支持通配符 |
| Events | []string | 触发事件类型,如 PutObject、PostObject、AppendObject、CopyObject、CompleteMultipartUpload 等 |
| Apps | []PutBucketNotificationAppsSt | 事件回调配置,包含回调地址或CFC函数 |
| Encryption | EncryptionKey | 回调签名密钥(可选) |
| ContentType | NotificationContentTypeSt | 按扩展名或MimeType过滤(可选) |
| Quota | NotificationQuotaSt | 通知配额限制(可选) |
代码示例如下:
1 // import "github.com/baidubce/bce-sdk-go/services/bos/api"
2 bucket := "YOUR-BUCKET"
3 req := api.PutBucketNotificationReq{
4 Notifications: []api.PutBucketNotificationSt{
5 {
6 Id: "notification-id",
7 Name: "notification-name",
8 AppId: "YOUR-APP-ID",
9 Status: "enabled",
10 Resources: []string{bucket + "/prefix/*"},
11 Events: []string{"PutObject", "AppendObject"},
12 Apps: []api.PutBucketNotificationAppsSt{
13 {
14 Id: "APP-ID",
15 EventUrl: "http://your-callback-url",
16 XVars: "",
17 },
18 },
19 },
20 },
21 }
22 err := bosClient.PutBucketNotification(bucket, req)
23 if err != nil {
24 fmt.Printf("put bucket notification failed: %s\n", err)
25 } else {
26 fmt.Printf("put bucket notification success.\n")
27 }
获取事件通知规则
用户可通过 GetBucketNotification 接口获取指定Bucket的事件通知规则,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 res, err := bosClient.GetBucketNotification(bucket)
3 if err != nil {
4 fmt.Printf("get bucket notification failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket notification success: %+v\n", res)
7 }
删除事件通知规则
用户可通过 DeleteBucketNotification 接口删除指定Bucket的事件通知规则,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketNotification(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket notification failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket notification success.\n")
7 }
镜像回源功能
BOS支持为Bucket配置镜像回源规则,当访问的Object在BOS中不存在时,BOS会自动从指定的源站获取数据并返回,同时可将其回源存储到BOS。
设置镜像回源规则
用户可通过 PutBucketMirror 接口为指定Bucket设置镜像回源规则,单条规则 MirrorConfigurationRule 的主要参数说明如下:
| 参数 | 类型 | 说明 |
|---|---|---|
| Prefix | string | 触发回源的资源前缀 |
| SourceUrl | string | 回源的源站地址 |
| BackSourceUrl | string | 备用回源地址 |
| PassQueryString | bool | 回源时是否透传QueryString |
| Mode | string | 回源模式 |
| StorageClass | string | 回源写入BOS的存储类型 |
| PassHeaders | []string | 回源时透传的Header列表 |
| IgnoreHeaders | []string | 回源时忽略的Header列表 |
| CustomHeaders | []HeaderPair | 回源时携带的自定义Header |
| Suffix | string | 回源资源后缀 |
| FixedKey | string | 固定回源Key |
| PrefixReplace | string | 前缀替换规则 |
代码示例如下:
1 // import "github.com/baidubce/bce-sdk-go/services/bos/api"
2 bucket := "YOUR-BUCKET"
3 args := &api.PutBucketMirrorArgs{
4 BucketMirroringConfiguration: []api.MirrorConfigurationRule{
5 {
6 Prefix: "prefix/",
7 SourceUrl: "http://your-source-url",
8 PassQueryString: false,
9 Mode: "fetch",
10 StorageClass: "STANDARD",
11 PassHeaders: []string{"Range"},
12 IgnoreHeaders: []string{},
13 },
14 },
15 }
16 err := bosClient.PutBucketMirror(bucket, args)
17 if err != nil {
18 fmt.Printf("put bucket mirror failed: %s\n", err)
19 } else {
20 fmt.Printf("put bucket mirror success.\n")
21 }
获取镜像回源配置
用户可通过 GetBucketMirror 接口获取指定Bucket的镜像回源配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 res, err := bosClient.GetBucketMirror(bucket)
3 if err != nil {
4 fmt.Printf("get bucket mirror failed: %s\n", err)
5 } else {
6 fmt.Printf("get bucket mirror success: %+v\n", res)
7 }
删除镜像回源配置
用户可通过 DeleteBucketMirror 接口删除指定Bucket的镜像回源配置,代码示例如下:
1 bucket := "YOUR-BUCKET"
2 err := bosClient.DeleteBucketMirror(bucket)
3 if err != nil {
4 fmt.Printf("delete bucket mirror failed: %s\n", err)
5 } else {
6 fmt.Printf("delete bucket mirror success.\n")
7 }
评价此篇文章
