限定条件下载

更新时间: 2019-03-14 10:05

下载对象时,可以指定一个或多个限定条件,满足限定条件时则进行下载,否则返回异常码,下载对象失败。

您可以使用的限定条件如下:


参数

作用

GetObjectInput.IfModifiedSince

如果对象的修改时间晚于该参数值指定的时间,则返回对象内容,否则返回异常码。

GetObjectInput.IfUnmodifiedSince

如果对象的修改时间早于该参数值指定的时间,则返回对象内容,否则返回异常码。

GetObjectInput.IfMatch

如果对象的ETag值与该参数值相同,则返回对象内容,否则返回异常码。

GetObjectInput.IfNoneMatch

如果对象的ETag值与该参数值不相同,则返回对象内容,否则返回异常码。

限定条件下载 - 图1 说明:

  • 对象的ETag值是指对象数据的MD5校验值。
  • 如果包含IfUnmodifiedSince并且不符合或者包含IfMatch并且不符合,则下载对象失败,返回异常码:412 precondition failed。
  • 如果包含IfModifiedSince并且不符合或者包含IfNoneMatch并且不符合,则下载对象失败,返回异常码:304 Not Modified。

以下代码展示了如何进行限定条件下载:

  1. // 引入依赖包
  2. import (
  3. "fmt"
  4. "obs"
  5. "time"
  6. )
  7.  
  8. var ak = "*** Provide your Access Key ***"
  9. var sk = "*** Provide your Secret Key ***"
  10. var endpoint = "https://your-endpoint"
  11.  
  12. // 创建ObsClient结构体
  13. var obsClient, _ = obs.New(ak, sk, endpoint)
  14.  
  15. func main() {
  16. input := &obs.GetObjectInput{}
  17. input.Bucket = "bucketname"
  18. input.Key = "objectkey"
  19.  
  20. format := "2006/01/02 15:04:05"
  21. t, _ := time.Parse(format, "2015/12/31 00:00:00")
  22. input.IfModifiedSince = t
  23.  
  24. output, err := obsClient.GetObject(input)
  25. if err == nil {
  26. defer output.Body.Close()
  27. fmt.Printf("StorageClass:%s, ETag:%s, ContentType:%s, ContentLength:%d, LastModified:%s\n",
  28. output.StorageClass, output.ETag, output.ContentType, output.ContentLength, output.LastModified)
  29. } else if obsError, ok := err.(obs.ObsError); ok {
  30. fmt.Printf("Code:%s\n", obsError.Code)
  31. fmt.Printf("Message:%s\n", obsError.Message)
  32. }
  33. }

父主题:下载对象