All Products
Search
Document Center

Object Storage Service:Memulihkan objek (Go SDK V2)

Last Updated:Apr 03, 2026

Objek dalam kelas penyimpanan Archive, Cold Archive, dan Deep Cold Archive harus dipulihkan terlebih dahulu sebelum dapat dibaca. Proses pemulihan membuat replika sementara yang berada berdampingan dengan objek arsip aslinya. Setelah periode pemulihan berakhir, replika tersebut akan dihapus secara otomatis. Topik ini menjelaskan cara menggunakan Object Storage Service (OSS) Go SDK untuk memulihkan objek dari kelas penyimpanan Archive, Cold Archive, dan Deep Cold Archive.

Usage notes

  • Metode RestoreObject hanya dapat dipanggil untuk objek dalam kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive.

  • Contoh dalam topik ini menggunakan wilayah China (Hangzhou) dengan ID wilayah cn-hangzhou dan menggunakan titik akhir publik secara default. Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung oleh OSS, lihat Regions and endpoints.

  • Contoh dalam topik ini membaca kredensial akses dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • Untuk memulihkan objek, Anda harus memiliki izin oss:RestoreObject. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.

Method signature

func (c *Client) RestoreObject(ctx context.Context, request *RestoreObjectRequest, optFns ...func(*Options)) (*RestoreObjectResult, error)

Request parameters

Parameter

Type

Description

ctx

context.Context

Konteks permintaan, digunakan untuk menetapkan durasi timeout total permintaan.

request

*RestoreObjectRequest

Parameter permintaan. Untuk informasi selengkapnya, lihat RestoreObjectRequest.

optFns

...func(*Options)

(Opsional) Parameter konfigurasi tingkat operasi. Untuk informasi selengkapnya, lihat Options.

Tabel berikut menjelaskan parameter umum dari RestoreObjectRequest.

Parameter

Type

Description

bucket

*string

Nama bucket.

key

*string

Nama objek.

versionId

*string

ID versi objek yang akan dipulihkan. Jika Anda tidak menentukan parameter ini, OSS akan memulihkan versi terbaru objek tersebut.

restoreRequest

*RestoreRequest

Parameter permintaan pemulihan.

Tabel berikut menjelaskan parameter dari RestoreRequest.

Parameter

Type

Description

days

int32

Jumlah hari objek tetap dalam keadaan dipulihkan. Untuk informasi selengkapnya, lihat Restore objects.

jobParameters

*JobParameters

Parameter yang menentukan prioritas pemulihan. Bidang Tier menentukan waktu yang diperlukan untuk memulihkan objek. Untuk informasi selengkapnya, lihat Restore objects.

Response parameters

Parameter

Type

Description

result

*RestoreObjectResult

Nilai kembali API. Nilai ini valid ketika err bernilai nil. Untuk detailnya, lihat RestoreObjectResult.

err

error

Objek error yang bernilai non-nil jika permintaan gagal.

Examples

Gunakan kode berikut untuk memulihkan objek dari kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive:

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Define global variables for command-line arguments.
var (
	region     string // The OSS region.
	bucketName string // The bucket name.
	objectName string // The object name.
)

// init initializes the command-line flags.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// Parse command-line flags.
	flag.Parse()

	// Check if the bucket name is empty.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check if the region is empty.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Check if the object name is empty.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// Load the default configuration, and set the credential provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to restore the object.
	request := &oss.RestoreObjectRequest{
		Bucket: oss.Ptr(bucketName), // The bucket name.
		Key:    oss.Ptr(objectName), // The object name.
		RestoreRequest: &oss.RestoreRequest{
			Days: 3, // Set the restoration period to 3 days.
		},
	}

	// Send the request to restore the object.
	result, err := client.RestoreObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to restore object %v", err)
	}

	// Print the result.
	log.Printf("restore object result:%#v\n", result)
}

Use cases

Delete a temporary replica

Saat Anda memulihkan objek dari kelas penyimpanan Cold Archive atau Deep Cold Archive, replika sementara dibuat untuk akses. Anda dikenai biaya penyimpanan untuk replika ini hingga periode pemulihan berakhir. Jika ingin mengakhiri keadaan dipulihkan lebih awal dan menghentikan biaya penyimpanan untuk replika tersebut, kirim permintaan CleanRestoredObject. Setelah permintaan selesai, objek akan kembali ke status beku dan tidak dapat diakses secara langsung.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Define global variables to store command-line arguments.
var (
	region     string // The OSS region.
	bucketName string // The bucket name.
	objectName string // The object name.
)

// init initializes the command-line flag parser and sets default values and help messages.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located. Required.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket. Required.")
	flag.StringVar(&objectName, "object", "", "The name of the object. Required.")
}

func main() {
	// Parse command-line flags.
	flag.Parse()

	// Check if the required region parameter is provided.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Check if the required bucket name parameter is provided.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check if the required object name parameter is provided.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// Load the default configuration, set the credential provider to read from environment variables, and set the region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to delete the temporary replica of the restored object.
	request := &oss.CleanRestoredObjectRequest{
		Bucket: oss.Ptr(bucketName), // Set the bucket name.
		Key:    oss.Ptr(objectName), // Set the object name.
	}

	// Send the request to delete the temporary replica.
	result, err := client.CleanRestoredObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to clean restored object %v", err)
	}

	// Print the result.
	log.Printf("clean restored object result:%#v\n", result)
}

References

  • Untuk kode contoh lengkap pemulihan objek, lihat GitHub.

  • Untuk informasi selengkapnya mengenai operasi API untuk memulihkan objek, lihat RestoreObject.

  • Untuk informasi selengkapnya tentang cara memulihkan objek, lihat Memulihkan objek.