アーカイブオブジェクトを読み込む前に復元する必要があります。 非アーカイブオブジェクトに対して、"restoreObject "を呼び出さないでください。

アーカイブオブジェクトの状態変換プロセスは次のとおりです。

  • アーカイブオブジェクトはフリーズ状態です。
  • 復元のために送信した後、サーバーはオブジェクトを復元します。 オブジェクトは復元中の状態です。
  • 1 分後、オブジェクトは復元状態になり、読み取ることができます。 復元された状態は、既定では 1 日続き、最大 7 日間まで延長できます。 この期間が終了すると、オブジェクトはフリーズ状態に戻ります。

アーカイブストレージクラスの詳細については、「ストレージクラスの概要」をご参照ください。関連するステータスコードの詳細については、「RestoreObject」をご参照ください。 アーカイブオブジェクトを復元するための完全なコードについては、『GitHub』をご参照ください。

次のコードを実行してオブジェクトを復元します。

package main

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

func HandleError(err error) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

func main() {
    // Create an OSSClient instance.
    client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    if err ! = nil {
        HandleError(err)
    }

    bucketName := "<yourBucketName>"
    objectName := "<yourObjectName>"
    localFilename := "<yourLocalFilename>"

    // Create a bucket.
    err = client.CreateBucket(bucketName, oss.StorageClass(oss.StorageArchive))
    if err ! = nil {
        HandleError(err)
    }

    // Obtain the bucket.
    archiveBucket, err := client.Bucket(bucketName)
    if err ! = nil {
        HandleError(err)
    }

    // Upload the archived object.
    var val = "More than just cloud."
    err = archiveBucket.PutObject(objectName, strings.NewReader(val))
    if err ! = nil {
        HandleError(err)
    }

    // Check whether the object is an archive object.
    meta, err := archiveBucket.GetObjectDetailedMeta(objectName)
    if err ! = nil {
        HandleError(err)
    }

    fmt.Println("X-Oss-Storage-Class : ", meta.Get("X-Oss-Storage-Class"))
    if meta.Get("X-Oss-Storage-Class") == string(oss.StorageArchive) {
        // Restore the archive object for read.
        err = archiveBucket.RestoreObject(objectName)
        if err ! = nil {
            HandleError(err)
        }

        // Wait until the object is restored.
        meta, err = archiveBucket.GetObjectDetailedMeta(objectName)
        for meta.Get("X-Oss-Restore") == "ongoing-request=\"true\"" {
            fmt.Println("x-oss-restore:" + meta.Get("X-Oss-Restore"))
            time.Sleep(1000 * time.Second)
            meta, err = archiveBucket.GetObjectDetailedMeta(objectName)
        }
    }

    // Download the restored object.
    err = archiveBucket.GetObjectToFile(objectName, localFilename)
    if err ! = nil {
        HandleError(err)
    }

    // Restore the object again.
    err = archiveBucket.RestoreObject(objectName)

    fmt.Println("ArchiveSample completed")
}