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和访问日志的文件前缀。访问日志的规则请参见[日志命名规则][logging-name]和[日志格式][logging-format]。
[logging-name]:https://cloud.baidu.com/doc/BOS/s/zk1rm7uwr#日志命名规则
[logging-format]:https://cloud.baidu.com/doc/BOS/s/zk1rm7uwr#日志格式
代码示例如下:
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][putbucketinventory]。
[putBucketInventory]:https://cloud.baidu.com/doc/BOS/s/tkh0h7tki#接口描述
代码示例如下:
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][getbucketinventory]。
[getBucketInventory]:https://cloud.baidu.com/doc/BOS/s/zkh0hc4on#接口描述
代码示例如下:
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][listbucketinventory]。
[listBucketInventory]:https://cloud.baidu.com/doc/BOS/s/Bkh0hdmw0#接口描述
代码示例如下:
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][deletebucketinventory]。
[deleteBucketInventory]:https://cloud.baidu.com/doc/BOS/s/Ukh0hesx6#接口描述
代码示例如下:
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][putbucketquota]。
[putBucketQuota]:https://cloud.baidu.com/doc/BOS/s/jkmvoddmf#接口描述
代码示例如下:
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][getbucketquota]。
[getBucketQuota]:https://cloud.baidu.com/doc/BOS/s/Nkmvol4qm#接口描述
代码示例如下:
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][deletebucketquota]。
[deleteBucketQuota]:https://cloud.baidu.com/doc/BOS/s/rkmvopcp6#接口描述
代码示例如下:
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][putbucketrequestpayment]。
[putBucketRequestPayment]:https://cloud.baidu.com/doc/BOS/s/6kh0hr5cq#接口描述
代码示例如下:
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][getbucketrequestpayment]。
[getBucketRequestPayment]:https://cloud.baidu.com/doc/BOS/s/Okh0htcmf#接口描述
代码示例如下:
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][initbucketobjectlock]。
[initBucketObjectLock]:https://cloud.baidu.com/doc/BOS/s/Xkc4jkho7#接口描述
代码示例如下:
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][getbucketobjectlock]。
[getBucketObjectLock]:https://cloud.baidu.com/doc/BOS/s/bkc4lq5mq#接口描述
代码示例如下:
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][deletebucketobjectlock]。
[deleteBucketObjectLock]:https://cloud.baidu.com/doc/BOS/s/rkc4lrfw8#接口描述
代码示例如下:
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][completebucketobjectlock]。
[completeBucketObjectLock]:https://cloud.baidu.com/doc/BOS/s/xkc4lsd70#接口描述
代码示例如下:
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][extendbucketobjectlock]。
[extendBucketObjectLock]:https://cloud.baidu.com/doc/BOS/s/okc4ltaed#接口描述
代码示例如下:
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][putbucketcors]。
[putBucketCors]:https://cloud.baidu.com/doc/BOS/s/ikc4git1o#接口描述
通过数据结构的参数格式设置跨域共享访问规则的代码示例如下:
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][getbucketcors]。
[getBucketCors]:https://cloud.baidu.com/doc/BOS/s/skc4hm89f#接口描述
代码示例如下:
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][deletebucketcors]。
[deleteBucketCors]:https://cloud.baidu.com/doc/BOS/s/9kc4i08di#接口描述
代码示例如下:
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	}