本文介绍如何使用限定条件下载OSS文件。

    下载文件时,可以指定一个或多个限定条件。满足限定条件则下载,不满足则返回错误,不下载。可以使用的限定条件如下:

    参数描述如何设置
    IfModifiedSince如果指定的时间早于实际修改时间,则正常传输文件,否则返回错误(304 Not modified)。oss.IfModifiedSince
    IfUnmodifiedSince如果指定的时间等于或者晚于文件实际修改时间,则正常传输文件,否则返回错误(412 Precondition failed)。oss.IfUnmodifiedSince
    IfMatch如果指定的ETag和OSS文件的ETag匹配,则正常传输文件,否则返回错误(412 Precondition failed)。oss.IfMatch
    IfNoneMatch如果指定的ETag和OSS文件的ETag不匹配,则正常传输文件,否则返回错误(304 Not modified)。oss.IfNoneMatch

    IfModifiedSince和IfUnmodifiedSince可以同时存在。IfMatch和IfNoneMatch可以同时存在。

    ETag可以通过Bucket.GetObjectDetailedMeta方法获取。

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. "time"
    6. "github.com/aliyun/aliyun-oss-go-sdk/oss"
    7. )
    8. func main() {
    9. // 创建OSSClient实例。
    10. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    11. if err != nil {
    12. fmt.Println("Error:", err)
    13. os.Exit(-1)
    14. }
    15. // 获取存储空间。
    16. bucket, err := client.Bucket("<yourBucketName>")
    17. if err != nil {
    18. fmt.Println("Error:", err)
    19. os.Exit(-1)
    20. }
    21. // 设置时间限定条件。
    22. date := time.Date(2015, time.November, 10, 23, 0, 0, 0, time.UTC)
    23. // 限定条件不满足,不下载文件。
    24. err = bucket.GetObjectToFile("<yourObjectName>", "LocalFile", oss.IfModifiedSince(date))
    25. if err == nil {
    26. fmt.Println("Error:", err)
    27. os.Exit(-1)
    28. }
    29. // 满足限定条件,下载文件。
    30. err = bucket.GetObjectToFile("<yourObjectName>", "LocalFile", oss.IfUnmodifiedSince(date))
    31. if err != nil {
    32. fmt.Println("Error:", err)
    33. os.Exit(-1)
    34. }
    35. }