ダウンロードに対して 1 つ以上の条件を設定できます。 指定した条件が満たされると、オブジェクトをダウンロードします。 指定された条件が満たされないと、エラーコードが返され、オブジェクトをダウンロードできません。 次の条件を設定します。

パラメーター 説明 設定方法
IfModifiedSince 指定された時間がオブジェクトが変更された時間より早い場合は、オブジェクトをダウンロードします。 そうでない場合は、エラー (304 Not modified) が返されます。 oss.IfModifiedSince
IfUnmodifiedSince 指定された時間がオブジェクトが変更された時間以降である場合は、オブジェクトをダウンロードします。 そうでない場合は、エラー (412 Precondition failed) が返されます。 oss.IfUnmodifiedSince
IfMatch 指定された ETag がオブジェクトのものと一致すれば、そのオブジェクトをダウンロードします。 そうでない場合は、エラー (412 Precondition failed) が返されます。 oss.IfMatch
IfNoneMatch 指定された ETag がオブジェクトのものと一致しない場合は、オブジェクトをダウンロードします。 そうでない場合は、エラー (304 Not modified) が返されます。 oss.IfNoneMatch

"If-Modified-Since" と "If-Unmodified-Since" の両方が、オブジェクトのダウンロード条件と同時に存在することがあります。 If-Match と If-None-Match の両方が、オブジェクトのダウンロード条件と同時に存在することがあります。

ETag を取得するには Bucket.GetObjectDetailedMeta を使用します。

package main

import (
	"fmt"
	"os"
	"time"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Create an OSSClient instance.
	client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Obtain the bucket.
	bucket, err := client.Bucket("<yourBucketName>")
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Configure time conditions.
	date := time.Date(2015, time.November, 10, 23, 0, 0, 0, time.UTC)

	// The condition is not met, and the object will not be downloaded.
	err = bucket.GetObjectToFile("<yourObjectName>", "LocalFile", oss.IfModifiedSince(date))
	if err == nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// The conditions are met, and the object will be downloaded.
	err = bucket.GetObjectToFile("<yourObjectName>", "LocalFile", oss.IfUnmodifiedSince(date))
	if err ! = nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}