数据处理及使用
生命周期管理
BOS支持用户对Bucket设置生命周期规则,以自动将过期的文件清除,节省存储空间。针对不同前缀的文件,用户可以同时设置多条规则。 在为Bucket设置一条生命周期规则时,需注意如下参数的使用方式:
规则项 | 描述 | 是否必填 | 备注 |
---|---|---|---|
id | 规则的标识符 | 必填 | 同一个bucket内规则id必须唯一,不能重复。如果用户不填系统会自动帮用户生成一个 |
status | 规则的状态 | 必填 | 取值为enabled或disabled,当规则处于disabled时规则不生效 |
resource | 规则对哪些资源生效 | 必填 | 举例:对samplebucket里以prefix/为前缀的Object生效:samplebucket/prefix/* |
condition | 规则依赖的条件 | 必填 | 目前只支持time形式 |
+time | 时间限制条件 | 必填 | 通过定义的dateGreaterThan实现 |
++dateGreaterThan | 描述时间关系 | 必填 | 支持绝对时间date和相对时间days。绝对时间date格式为yyyy-mm-ddThh:mm:ssZ,eg. 2016-09-07T00:00:00Z。绝对时间为UTC时间,必须以00:00:00(UTC 0点)结尾;相对时间days的描述遵循ISO8601,支持的最小时间粒度为天,如:$(lastModified)+P7D表示的时间为object的last-modified之后7天。 |
action | 对resource执行的操作动作 | 必填 | - |
+name | 执行的操作名称 | 必填 | 取值为Transition、DeleteObject、AbortMultipartUpload |
+storageClass | Object的存储类型 | 可选 | action为Transition时可以设定,取值为STANDARD_IA或COLD,表示从原存储类型转为低频存储或冷存储 |
设置生命周期规则
可通过如下代码设置一条生命周期规则:
// import "github.com/baidubce/bce-sdk-go/bce"
ruleStr := `{
"rule": [
{
"id": "delete-rule-1",
"status": "enabled",
"resource": ["my-bucket/abc*"],
"condition": {
"time": {
"dateGreaterThan": "2018-01-01T00:00:00Z"
}
},
"action": {
"name": "DeleteObject"
}
}
]
}`
// 1. 通过stream调用接口进行设置
body, _ := bce.NewBodyFromString(ruleStr)
err := bosClient.PutBucketLifecycle(bucketName, body)
// 2. 直接传入字符串
err := bosClient.PutBucketLifecycleFromString(bucketName, ruleStr)
查看生命周期规则
可通过如下代码查看Bucket内的生命周期规则:
res, err := bosClient.GetBucketLifecycle(bucketName)
fmt.Printf("%+v\n", res.Rule)
删除生命周期规则
可通过如下代码清空生命周期规则:
err := bosClient.DeleteBucketLifecycle(bucketName)
跨域资源共享
跨域资源共享(Cross-Origin Resource Sharing),简称CORS,是HTML5提供的标准跨域解决方案,BOS目前已经支持CORS标准来实现跨域访问。关于跨域访问的介绍请参考跨域访问。
设置CORS规则
用户可针对Bucket设置CORS规则,支持通过json字符串、文件、流、对象方式设置:
// import "github.com/baidubce/bce-sdk-go/service/bos/api"
// 1. 通过流式调用接口进行设置
err := bosClient.PutBucketCors(bucketName, body)
// 2. 直接传入字符串
err := bosClient.PutBucketCorsFromString(bucketName, corsString)
// 3. 传入CORS文件名
err := bosClient.PutBucketCorsFromFile(bucketName, corsFile)
// 4. 传入对象
corsObj := api.BucketCORSType{
AllowedOrigins: []string{"example.com"},
AllowedMethods: []string{"HEAD", "GET"},
AllowedHeaders: []string{"*"},
AllowedExposeHeaders: []string{"user-custom-expose-header"},
MaxAgeSeconds: 3600,
}
err := bosClient.PutBucketCorsFromStruct(src, &api.PutBucketCorsArgs{CorsConfiguration:[]api.BucketCORSType{corsObj}})
获取CORS规则
用户可获取指定Bucket的CORS规则:
result, err := bosClient.GetBucketCors(bucketName)
结果对象的定义与PutBucketCorsFromStruct
接口的请求参数相同。
删除CORS规则
可参考如下代码删除Bucket的CORS规则,删除后的Bucket将无法进行跨域访问。
err := bosClient.DeleteBucketCors(bucketName)
管理存储类型
每个Bucket会有自身的存储类型,如果该Bucket下的Object上传时未指定存储类型则会默认继承该Bucket的存储类型。
设置Bucket存储类型
Bucket默认的存储类型为标准模式,用户可以通过下面的代码进行设置:
storageClass := "STANDARD_IA"
err := bosClient.PutBucketStorageclass(bucketName, storageClass)
获取Bucket存储类型
下面的代码可以查看一个Bucket的默认存储类型:
storageClass, err := bosClient.GetBucketStorageclass(bucketName)
设置访问日志
BOS GO SDK支持将用户访问Bucket时的请求记录记录为日志,用户可以指定访问Bucket的日志存放的位置。日志会包括请求者、Bucket名称、请求时间和请求操作等。关于Bucket日志的详细功能说明可参见设置访问日志。
开启Bucket日志
用户通过设置用于放置日志的Bucket和日志文件前缀来开启Bucket日志功能。下面的示例代码可以设置访问日志的位置和前缀:
// import "github.com/baidubce/bce-sdk-go/bce"
// 1. 从JSON字符串设置
loggingStr := `{"targetBucket": "logging-bucket", "targetPrefix": "my-log/"}`
err := bosClient.PutBucketLoggingFromString(bucketName, loggingStr)
// 2. 从参数对象设置
args := new(api.PutBucketLoggingArgs)
args.TargetBucket = "logging-bucket"
args.TargetPrefix = "my-log/"
err := bosClient.PutBucketLoggingFromStruct(bucketName, args)
// 3. 读取json格式的文件进行设置
loggingStrem := bce.NewBodyFromFile("<path-to-logging-setting-file>")
err := bosClient.PutBucketLogging(bucketName, loggingStream)
查看Bucket日志设置
下面的代码分别给出了如何获取给定Bucket的日志配置信息:
res, err := bosClient.GetBucketLogging(bucketName)
fmt.Println(res.Status)
fmt.Println(res.TargetBucket)
fmt.Println(res.TargetPrefix)
关闭Bucket日志
需要关闭Bucket的日志功能时,只需调用删除接口即可实现:
err := bosClient.DeleteBucketLogging(bucketName)
服务端加密
设置服务端加密功能
用户可针对一个Bucket设置开启服务端加密的功能,所有存储到该Bucket的数据将会进行加密存储,保证数据安全性。
err := bosClient.PutBucketEncryption(bucketName, algorithm)
algorithm
参数为加密算法,当前只支持“AES256”加密算法。
获取服务端加密
用户可调用如下接口获取Bucket的服务端加密功能:
algorithm, err := bosClient.GetBucketEncryption(bucketName)
删除服务端加密功能
用户可调用如下接口删除指定Bucket的服务端加密功能:
err := bosClient.DeleteBucketEncryption(bucketName)
原图保护功能
用户可针对Bucket下存储的图片设置原图保护功能,用户需指定待保护的资源。
开启原图保护功能
通过如下代码开启原图保护功能:
resources := []stirng{
"bucket/prefix/*",
"bucket/*/suffix",
}
err := bosClient.PutBucketCopyrightProtection(bucketName, resources...)
resources
参数表示图片保护的范围,可指定前缀、后缀,"bucket/*"
表示整个bucket。
获取原图保护设置
用户通过如下示例代码获取Bucket设置的原图保护的资源:
resources, err := bosClient.GetBucketCopyrightProtection(bucketName)
删除原图保护配置
err := bosClient.DeleteBucketCopyrightProtection(bucketName)
静态网站托管
开启静态网站托管
用户可通过如下示例代码设置一个Bucket开启静态网站托管的功能:
// import "github.com/baidubce/bce-sdk-go/service/bos/api"
// 1. 通过流式调用接口进行设置
err := bosClient.PutBucketStaticWebsite(bucketName, body)
// 2. 直接传入json字符串
jsonStr := `{"index": "index.html", "notFound": "404.html"}`
err := bosClient.PutBucketStaticWebsiteFromString(bucketName, jsonStr)
// 3. 传入对象
args := &api.BucketStaticWebsiteType{
Index: "index.html",
NotFound: "404.html",
}
err := bosClient.PutBucketStaticWebsiteFromStruct(bucketName, (*api.PutBucketStaticWebsiteArgs)(args))
// 4. 简单接口设置
err := bosClient.SimplePutBucketStaticWebsite(bucketName, "index.html", "404.html")
获取静态网站托管的设置
用户通过如下代码获取指定Bucket的静态网站托管的设置情况:
result, err := bosClient.GetBucketStaticWebsite(bucketName)
fmt.Println(result.Index)
fmt.Println(result.NotFound)
删除静态网站托管的设置
通过如下示例代码删除指定Bucket的静态网站托管功能:
err := bosClient.DeleteBucketStaticWebsite(bucketName)
跨区域复制
BOS提供了跨区域复制功能,针对用户在某个物理区域创建的Bucket,为了数据安全或其他目的,可配置将整个Bucket的数据复制到物理上的一个或多个地域
开启Bucket跨区域复制功能
用户可通过如下代码开启Bucket的跨区域复制功能:
// 1. json字符串
jsonStr := `{
"status":"enabled",
"resource":[
"bucket/abc",
"bucket/cd*"
],
"destination": {
"bucket":"bucket-name",
"storageClass":"COLD"
},
"replicateHistory": {
"storageClass":"COLD"
},
"replicateDeletes":"enabled",
"id":"sample-bucket"
}`
err := bosClient.PutBucketReplicationFromString(bucketName, jsonStr, "sample-bucket")
// 2. 使用配置文件名
err := bosClient.PutBucketReplicationFromFile(bucketName, configFile, "sample-bucket")
// 3. 使用参数对象
argsObj := &api.PutBucketReplicationArgs{
Id: "sample-bucket",
Status: "enabled",
Resource: []string{"bucket/abc"},
ReplicateDeletes: "enabled",
Destination: &api.BucketReplicationDescriptor{"bucket-abc", "COLD"},
ReplicateHistory: &api.BucketReplicationDescriptor{"bucket-abc", "COLD"},
}
err := bosClient.PutBucketReplicationFromStruct(bucketName, argsObj, argsObj.Id)
// 4. 使用流
err := bosClient.PutBucketReplication(bucketName, bodyStream, "sample-bucket")
获取Bucket跨区域复制的配置
用户可使用如下示例代码获取Bucket的跨区域复制的配置,返回的结果与Put接口字段相同。
result, err := bosClient.GetBucketReplication(bucketName, "sample-bucket")
删除Bucket跨区域复制配置
用户可使用如下示例代码删除Bucket跨区域复制功能:
err := bosClient.DeleteBucketReplication(bucketName, "sample-bucket")
获取跨区域复制的进度
由于跨区域复制需要后台进行异步复制操作,用户可通过如下接口查询当前复制到进度:
result, err := bosClient.GetBucketReplicationProgress(bucketName, "sample-bucket")
返回的结果对象包含了如下字段:
Status
(string): 当前的状态HistoryReplicationPercent
(float64): 当前复制到进度LatestReplicationTime
(string): 最近一次执行复制的时间
获取replication规则列表
用户可使用如下示例代码获取bucket replication规则列表
list, err := bosClient.ListBucketReplication(srcBucket)
镜像回源
开启镜像回源
用户可通过如下示例代码设置一个Bucket开启镜像回源的功能
mirrorRule := &api.MirrorConfigurationRule{
Prefix: "prefix",
SourceUrl: "http://bj.bcebos.com",
Mode: "fetch",
StorageClass: "STANDARD",
PassQueryString: false,
PassHeaders: []string{"header3", "header4"},
IgnoreHeaders: []string{"header3", "header4"},
Resource: "*",
PrefixReplace: "test1",
Version: "v2",
}
mirrorArgs := &api.PutBucketMirrorArgs{
BucketMirroringConfiguration: []api.MirrorConfigurationRule{*mirrorRule},
}
err = bosClient.PutBucketMirror(bucketName, mirrorArgs)
获取镜像回源
result, err := bosClient.GetBucketMirror(bucketName)
删除镜像回源
err = bosClient.DeleteBucketMirror(bucketName)
标签管理
为bucket添加标签
用户可通过如下示例代码为bucket绑定标签
tag1 := api.Tag{
Tagkey: "tagKey1",
TagValue: "tagValue1",
}
tag2 := api.Tag{
Tagkey: "tagKey2",
TagValue: "tagValue2",
}
tags := []api.Tag{tag1, tag2}
putBucketTagArgs := &api.PutBucketTagArgs{
Tags: tags,
}
err = bosClient.PutBucketTag(bucketName, putBucketTagArgs)
获取bucket标签
result, err := bosClient.GetBucketTag(bucketName)
删除Bucket标签
err = bosClient.DeleteBucketTag(bucketName)