すべてのプロダクト
Search
ドキュメントセンター

:条件付きダウンロード

最終更新日:Feb 23, 2024

バケットから単一のオブジェクトをダウンロードする場合、最終変更時刻またはオブジェクトのETag (オブジェクトコンテンツの識別子) に基づいてダウンロード条件を指定できます。 指定されたダウンロード条件が満たされると、オブジェクトがダウンロードされます。 指定されたダウンロード条件が満たされない場合、エラーが返され、オブジェクトはダウンロードされません。 条件付きダウンロードを使用すると、ネットワーク伝送とリソース消費を削減し、ダウンロード効率を向上させることができます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。

  • 条件付きダウンロードを実行するには、oss:GetObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

条件

利用可能なオブジェクトのダウンロード条件を次の表に示します。

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

  • ossClient.getObjectMetaを使用してETagを取得できます。

パラメーター

説明

設定方法

If-Modified-Since

指定された時刻が、オブジェクトが最後に変更された時刻よりも早い場合、オブジェクトをダウンロードできます。 それ以外の場合、304 Not Modifiedが返されます。

oss.IfModifiedSince

If-Unmodified-Since

指定された時刻が、オブジェクトが最後に変更された時刻以降の場合、オブジェクトをダウンロードできます。 そうでない場合、412 Precondition Failedが返されます。

oss.IfUnmodifiedSince

If-Match

指定された ETag がオブジェクトのものと一致すれば、そのオブジェクトをダウンロードすることができます。 そうでない場合、412 Precondition Failedが返されます。

oss.IfMatch

If-None-Match

指定された ETag がオブジェクトのものと一致しない場合は、オブジェクトをダウンロードできます。 それ以外の場合、304 Not Modifiedが返されます。

oss.IfNoneMatch

次のサンプルコードは、条件付きダウンロードの実行方法の例を示しています。

パッケージメイン

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

func main() {
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // バケットの名前を指定します。 
    bucket, err := client.Bucket("yourBucketName")
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // たとえば、オブジェクトは2023年11月21日18:43:02に最後に変更されました。 指定された時刻が最後に変更された時刻より前の場合、オブジェクトはIf-modified-Since条件を満たし、オブジェクトがダウンロードされます。 
    date := time.Date(2023, time.November, 21, 10, 40, 02, 0, time.UTC)

    // 指定された条件を満たさないオブジェクトはダウンロードされません。 
    // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
    err = bucket.GetObjectToFile("yourObjectName", "LocalFile", oss.IfUnmodifiedSince(date))    
    if err == nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 指定された条件を満たす場合、オブジェクトがダウンロードされます。 
    err = bucket.GetObjectToFile("yourObjectName", "LocalFile", oss.IfModifiedSince(date))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
}

参考資料

  • 条件付きダウンロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。

  • 条件付きダウンロードを実行するために呼び出すことができるAPI操作の詳細については、「GetObject」をご参照ください。