数据处理及使用

生命周期管理

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
+storageClassObject的存储类型可选action为Transition时可以设定,取值为STANDARD_IA或COLD,表示从原存储类型转为低频存储或冷存储

设置生命周期规则

可通过如下代码设置一条生命周期规则:

  1. // import "github.com/baidubce/bce-sdk-go/bce"
  2. ruleStr := `{
  3. "rule": [
  4. {
  5. "id": "delete-rule-1",
  6. "status": "enabled",
  7. "resource": ["my-bucket/abc*"],
  8. "condition": {
  9. "time": {
  10. "dateGreaterThan": "2018-01-01T00:00:00Z"
  11. }
  12. },
  13. "action": {
  14. "name": "DeleteObject"
  15. }
  16. }
  17. ]
  18. }`
  19. // 1. 通过stream调用接口进行设置
  20. body, _ := bce.NewBodyFromString(ruleStr)
  21. err := bosClient.PutBucketLifecycle(bucketName, body)
  22. // 2. 直接传入字符串
  23. err := bosClient.PutBucketLifecycleFromString(bucketName, ruleStr)

查看生命周期规则

可通过如下代码查看Bucket内的生命周期规则:

  1. res, err := bosClient.GetBucketLifecycle(bucketName)
  2. fmt.Printf("%+v\n", res.Rule)

删除生命周期规则

可通过如下代码清空生命周期规则:

  1. err := bosClient.DeleteBucketLifecycle(bucketName)

跨域资源共享

跨域资源共享(Cross-Origin Resource Sharing),简称CORS,是HTML5提供的标准跨域解决方案,BOS目前已经支持CORS标准来实现跨域访问。关于跨域访问的介绍请参考跨域访问

设置CORS规则

用户可针对Bucket设置CORS规则,支持通过json字符串、文件、流、对象方式设置:

  1. // import "github.com/baidubce/bce-sdk-go/service/bos/api"
  2. // 1. 通过流式调用接口进行设置
  3. err := bosClient.PutBucketCors(bucketName, body)
  4. // 2. 直接传入字符串
  5. err := bosClient.PutBucketCorsFromString(bucketName, corsString)
  6. // 3. 传入CORS文件名
  7. err := bosClient.PutBucketCorsFromFile(bucketName, corsFile)
  8. // 4. 传入对象
  9. corsObj := &api.BucketCORSType{
  10. AllowedOrigins: []string{"example.com"},
  11. AllowedMethods: []string{"HEAD", "GET"},
  12. AllowedHeaders: []string{"*"},
  13. AllowedExposeHeaders: []string{"*"},
  14. MaxAgeSeconds: 3600,
  15. }
  16. err := bosClient.PutBucketCorsFromStruct(bucketName, &api.PutBucketCorsArgs{corsObj})

获取CORS规则

用户可获取指定Bucket的CORS规则:

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

结果对象的定义与PutBucketCorsFromStruct接口的请求参数相同。

删除CORS规则

可参考如下代码删除Bucket的CORS规则,删除后的Bucket将无法进行跨域访问。

  1. err := bosClient.DeleteBucketCors(bucketName)

管理存储类型

每个Bucket会有自身的存储类型,如果该Bucket下的Object上传时未指定存储类型则会默认继承该Bucket的存储类型。

设置Bucket存储类型

Bucket默认的存储类型为标准模式,用户可以通过下面的代码进行设置:

  1. storageClass := "STANDARD_IA"
  2. err := bosClient.PutBucketStorageclass(bucketName, storageClass)

获取Bucket存储类型

下面的代码可以查看一个Bucket的默认存储类型:

  1. storageClass, err := bosClient.GetBucketStorageclass(bucketName)

设置访问日志

BOS GO SDK支持将用户访问Bucket时的请求记录记录为日志,用户可以指定访问Bucket的日志存放的位置。日志会包括请求者、Bucket名称、请求时间和请求操作等。关于Bucket日志的详细功能说明可参见设置访问日志

开启Bucket日志

用户通过设置用于放置日志的Bucket和日志文件前缀来开启Bucket日志功能。下面的示例代码可以设置访问日志的位置和前缀:

  1. // import "github.com/baidubce/bce-sdk-go/bce"
  2. // 1. 从JSON字符串设置
  3. loggingStr := `{"targetBucket": "logging-bucket", "targetPrefix": "my-log/"}`
  4. err := bosClient.PutBucketLoggingFromString(bucketName, loggingStr)
  5. // 2. 从参数对象设置
  6. args := new(api.PutBucketLoggingArgs)
  7. args.TargetBucket = "logging-bucket"
  8. args.TargetPrefix = "my-log/"
  9. err := bosClient.PutBucketLoggingFromStruct(bucketName, args)
  10. // 3. 读取json格式的文件进行设置
  11. loggingStrem := bce.NewBodyFromFile("<path-to-logging-setting-file>")
  12. err := bosClient.PutBucketLogging(bucketName, loggingStream)

查看Bucket日志设置

下面的代码分别给出了如何获取给定Bucket的日志配置信息:

  1. res, err := bosClient.GetBucketLogging(bucketName)
  2. fmt.Println(res.Status)
  3. fmt.Println(res.TargetBucket)
  4. fmt.Println(res.TargetPrefix)

关闭Bucket日志

需要关闭Bucket的日志功能是,只需调用删除接口即可实现:

  1. err := bosClient.DeleteBucketLogging(bucketName)

服务端加密

设置服务端加密功能

用户可针对一个Bucket设置开启服务端加密的功能,所有存储到该Bucket的数据将会进行加密存储,保证数据安全性。

  1. err := bosClient.PutBucketEncryption(bucketName, algorithm)

algorithm参数为加密算法,当前只支持“AES256”加密算法。

获取服务端加密

用户可调用如下接口获取Bucket的服务端加密功能:

  1. algorithm, err := bosClient.GetBucketEncryption(bucketName)

删除服务端加密功能

用户可调用如下接口删除指定Bucket的服务端加密功能:

  1. err := bosClient.DeleteBucketEncryption(bucketName)

原图保护功能

用户可针对Bucket下存储的图片设置原图保护功能,用户需指定待保护的资源。

开启原图保护功能

通过如下代码开启原图保护功能:

  1. err := bosClient.PutBucketCopyrightProtection(bucket, resources)

resources参数为可变参数,可指定多个。

获取原图保护设置

用户通过如下示例代码获取Bucket设置的原图保护的资源:

  1. resources, err := bosClient.GetBucketCopyrightProtection(bucketName)

删除原图保护配置

  1. err := bosClient.DeleteBucketCopyrightProtection(bucketName)

静态网站托管

开启静态网站托管

用户可通过如下示例代码设置一个Bucket开启静态网站托管的功能:

  1. // import "github.com/baidubce/bce-sdk-go/service/bos/api"
  2. // 1. 通过流式调用接口进行设置
  3. err := bosClient.PutBucketStaticWebsite(bucketName, body)
  4. // 2. 直接传入json字符串
  5. jsonStr := `{"index": "index.html", "notFound": "404.html"}`
  6. err := bosClient.PutBucketStaticWebsiteFromString(bucketName, jsonStr)
  7. // 3. 传入对象
  8. args := &api.BucketStaticWebsiteType{
  9. Index: "index.html",
  10. NotFound: "404.html",
  11. }
  12. err := bosClient.PutBucketStaticWebsiteFromStruct(bucketName, args)
  13. // 4. 简单接口设置
  14. err := bosClient.SimplePutBucketStaticWebsite(bucketName, "index.html", "404.html")

获取静态网站托管的设置

用户通过如下代码获取指定Bucket的静态网站托管的设置情况:

  1. result, err := bosClient.SimplePutBucketStaticWebsite(bucketName)
  2. fmt.Println(result.Index)
  3. fmt.Println(result.NotFound)

删除静态网站托管的设置

通过如下示例代码删除指定Bucket的静态网站托管功能:

  1. err := bosClient.DeleteBucketStaticWebsite(bucketName)

跨区域复制

BOS提供了跨区域复制功能,针对用户在某个物理区域创建的Bucket,为了数据安全或其他目的,可配置将整个Bucket的数据复制到物理上的另一个区域。

开启Bucket跨区域复制功能

用户可通过如下代码开启Bucket的跨区域复制功能:

  1. // 1. json字符串
  2. jsonStr := `{
  3. "status":"enabled",
  4. "resource":[
  5. "bucket/abc",
  6. "bucket/cd*",
  7. ],
  8. "destination": {
  9. "bucket":"bucket-name",
  10. "storageClass":"COLD"
  11. },
  12. "replicateHistory": {
  13. "bucket":"bucket-name",
  14. "storageClass":"COLD"
  15. },
  16. "replicateDeletes":"enabled",
  17. "id":"sample-bucket-replication-config"
  18. }`
  19. err := bosClient.PutBucketReplicationFromString(bucketName, jsonStr)
  20. // 2. 使用配置文件名
  21. err := bosClient.PutBucketReplicationFromFile(bucketName, configFile)
  22. // 3. 使用参数对象
  23. argsObj := &api.PutBucketReplicationArgs{
  24. Id: "sample-bucket-replication-config",
  25. Status: "enabled",
  26. Resource: []string{"bucket/abc"},
  27. ReplicateDeletes: "enabled",
  28. Destination: &api.BucketReplicationDescriptor{"bucket-abc", "COLD"},
  29. ReplicateHistory: &api.BucketReplicationDescriptor{"bucket-abc", "COLD"},
  30. }
  31. err := bosClient.PutBucketReplicationFromStruct(bucketName, argsObj)
  32. // 4. 使用流
  33. err := bosClient.PutBucketReplication(bucketName, bodyStream)

获取Bucket跨区域复制的配置

用户可使用如下示例代码获取Bucket的跨区域复制的配置,返回的结果与Put接口字段相同。

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

删除Bucket跨区域复制配置

用户可使用如下示例代码删除Bucket跨区域复制功能:

  1. err := bosClient.DeleteBucketReplication(bucketName)

获取跨区域复制到进度

由于跨区域复制需要后台进行异步复制操作,用户可通过如下接口查询当前复制到进度:

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

返回的结果对象包含了如下字段:

  • Status(string): 当前的状态
  • HistoryReplicationPercent(float64): 当前复制到进度
  • LatestReplicationTime(string): 最近一次执行复制的时间