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

:OSS SDK for Goを使用してオブジェクトメタデータを管理する

最終更新日:Feb 23, 2024

Object Storage Service (OSS) に保存されているオブジェクトは、キー、データ、およびオブジェクトメタデータで構成されます。 オブジェクトメタデータは、オブジェクト属性を記述する。 オブジェクトメタデータには、標準HTTPヘッダーとユーザーメタデータが含まれます。 標準のHTTPヘッダーを設定することで、オブジェクトキャッシュポリシーや強制オブジェクトダウンロードポリシーなどのカスタムHTTPリクエストポリシーを作成できます。 オブジェクトのユーザーメタデータを設定して、オブジェクトの目的や属性を識別することもできます。

使用上の注意

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

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

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

  • オブジェクトメタデータを設定するには、oss:PutObject権限が必要です。 オブジェクトメタデータを照会するには、oss:GetObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

オブジェクトのアップロード時のオブジェクトメタデータの設定

次のコードでは、オブジェクトをアップロードするときにオブジェクトメタデータを設定する方法の例を示します。

警告

オブジェクトをOSSにアップロードするときに、OSSに保存されているオブジェクトの名前がアップロードされたオブジェクトと同じ場合、OSSは既存のオブジェクトをアップロードされたオブジェクトで上書きします。 オブジェクトをアップロードしてオブジェクトメタデータを設定する前に、既存のオブジェクトを誤って上書きしないように、宛先バケットに同じ名前のオブジェクトが含まれていないことを確認してください。 同じ名前のオブジェクトが上書きされないようにする方法の詳細については、「簡易アップロード」をご参照ください。

パッケージメイン

import (import (import)
    "fmt"
    "os"
    "time",
    "strings"
    「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)
    }

    // Specify the bucket name. 例: examplebucket. 
    bucket, err := client.Bucket("examplebucket")
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // オブジェクトメタデータを設定します。 有効期限を1月10日23:00:00に設定し、GMTで2049し、アクセス制御リスト (ACL) をpublic-readに、MyPropをユーザーメタデータとしてMyPropValに設定します。 
    expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
    options := []oss.Option{
        oss.Expires(expires),
        oss.ObjectACL(oss.ACLPublicRead),
        oss.Meta("MyProp", "MyPropVal"),
    }

    // データストリームを使用してオブジェクトをアップロードします。 
    // オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 
    err = bucket.PutObject("exampledir/exampleobject.txt" 、strings.NewReader("MyObjectValue") 、オプション...)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // オブジェクトのメタデータを照会します。 
    props, err := bucket.GetObjectDetailedMeta("exampledir/exampleobject.txt")
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println("オブジェクトメタ:", props)
} 

オブジェクトメタデータの変更

次のコードは、オブジェクトのメタデータを変更する方法の例を示しています。

パッケージメイン

import (import (import)
    "fmt"
    "os"
    「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)
    }
    
    // Specify the bucket name. 例: examplebucket. 
    bucketName := "examplebucket"
    // オブジェクトのフルパスを指定します。 
    objectName := "exampledir/exampleobject.txt"
    
    bucket, err := client.Bucket(bucketName)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 一度に1つのオブジェクトメタデータパラメーターを変更します。 
    err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // 一度に複数のオブジェクトメタデータパラメーターを変更します。 
    options := []oss.Option{
        oss.Meta("MyMeta", "MyMetaValue2"),
        oss.Meta("MyObjectLocation", "HangZhou"),
    }
    err = bucket.SetObjectMeta(objectName, options...)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // オブジェクトのメタデータを照会します。 
    props, err := bucket.GetObjectDetailedMeta(objectName)
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println("オブジェクトメタ:", props)
} 

オブジェクトメタデータの照会

  • 最後のアクセス時刻 (X-Oss-last-access-time) を除くオブジェクトメタデータの照会

    次のコードでは、最後のアクセス時間を除いて、オブジェクトメタデータを照会する方法の例を示します。

    パッケージメイン
    
    import (import (import)
        "fmt"
        "os"
        「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)
        }
    
        // Specify the bucket name. 例: examplebucket. 
        bucketName := "examplebucket"
        // オブジェクトのフルパスを指定します。 
        objectName := "exampledir/exampleobject.txt"
       
        bucket, err := client.Bucket(bucketName)
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        // オブジェクトのメタデータを照会します。 
        props, err := bucket.GetObjectDetailedMeta(objectName)
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        fmt.Println("オブジェクトメタ:", props)
    } 
  • 最終アクセス時刻 (X-Oss-last-access-time) を含むオブジェクトメタデータの照会

    次のコードは、最終アクセス時刻を含むオブジェクトメタデータを照会する方法の例を示しています。

    パッケージメイン
    
    import (import (import)
        "fmt"
        "os"
        「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)
        }
        // Specify the bucket name. 例: examplebucket. 
        bucketName := "examplebucket"
        // オブジェクトのフルパスを指定します。 
        objectName := "exampledir/exampleobject.txt"
        
        bucket,err := client.Bucket(bucketName)
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // オブジェクトのメタデータを照会します。 
        ヘッダー、err := bucket.GetObjectMeta(objectName)
        if err! =nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // オブジェクトの最終アクセス時刻を照会します。 
        fmt.Printf("Last Access Time:% s\n", header.Get("X-Oss-Last-Access-Time"))
    } 

参考資料

  • オブジェクトメタデータのクエリに使用する完全なサンプルコードについては、『GitHub』をご参照ください。

  • シンプルアップロード中にオブジェクトメタデータを設定するために呼び出すことができるAPI操作の詳細については、「PutObject」をご参照ください。

  • オブジェクトメタデータを変更するために呼び出すことができるAPI操作の詳細については、「CopyObject」をご参照ください。

  • オブジェクトメタデータを照会するために呼び出すAPI操作の詳細については、「GetObjectMeta」および「HeadObject」をご参照ください。

よくある質問

オブジェクトをバケットにアップロードし、同時にオブジェクトのメタデータを設定する場合、バケット内の同じ名前の既存のオブジェクトが上書きされないようにするにはどうすればよいですか?

次のいずれかの方法を使用して、バケット内の同じ名前のオブジェクトが上書きされないようにすることができます。

  • バージョン管理の有効化

    バケットのバージョン管理を有効にすると、OSSは既存のオブジェクトを以前のバージョンと同じ名前で保持し、アップロードしたオブジェクトを現在のバージョンとして保存します。 以前のバージョンはいつでも復元できます。 詳細については、「バージョン管理の有効化」をご参照ください。

  • アップロードリクエストにx-oss-forbid-overwriteヘッダーを含める

    アップロード要求にx-oss-forbid-overwriteヘッダーを含め、ヘッダーをtrueに設定できます。 既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、アップロードは失敗し、OSSはFileAlreadyExistsエラーを返します。 詳しくは、「PutObject」 をご参照ください。