全部产品
Search
文档中心

Object Storage Service:Pulihkan objek

更新时间:Nov 21, 2025

Objek yang disimpan dalam kelas penyimpanan Archive, Cold Archive, atau Deep Cold Archive dari Object Storage Service (OSS) berada dalam status beku untuk mengurangi biaya penyimpanan. Anda tidak dapat membaca objek-objek ini secara langsung dan harus memulihkannya ke status yang dapat dibaca sebelum mengunduh, memproses, atau menganalisisnya.

Cara kerja

Operasi pemulihan membuat replika sementara yang dapat dibaca dari objek yang dibekukan tanpa mengubah kelas penyimpanan objek aslinya. Objek tersebut melewati status-status berikut:

  1. Status beku: Status awal objek. Objek tidak dapat dibaca. Anda hanya dapat melakukan operasi yang tidak melibatkan pembacaan konten objek, seperti mengkueri metadata dan menghapus objek.

  2. Sedang dipulihkan: Setelah Anda mengirim permintaan RestoreObject untuk pertama kalinya, objek memasuki status ini. Server memproses permintaan tersebut secara asinkron.

    • API mengembalikan 202 Accepted untuk permintaan pertama.

    • Dalam status ini, jika Anda mengirim permintaan pemulihan lain dengan prioritas yang sama, API akan mengembalikan 409 Conflict, yang menunjukkan bahwa operasi sedang berlangsung. Namun, Anda dapat mengirim permintaan dengan prioritas lebih tinggi untuk mempercepat pemulihan.

  3. Dipulihkan: Setelah replika sementara dibuat, objek memasuki status ini dan kontennya menjadi dapat dibaca. Jika Anda mengirim permintaan pemulihan lain dalam status ini, API akan mengembalikan 200 OK dan memperpanjang periode validitas replika sementara.

  4. Replika kedaluwarsa: Setelah periode validitas replika berakhir, replika sementara dihapus. Untuk membaca objek lagi, Anda harus mengirim permintaan pemulihan baru.

Pilih prioritas pemulihan

Waktu yang diperlukan untuk menyelesaikan pemulihan bervariasi tergantung pada kelas penyimpanan dan prioritas. Waktu pemulihan aktual dapat berbeda.

Kelas penyimpanan

Deskripsi

Archive

1 menit.

Cold Archive

  • Expedited: Objek dipulihkan dalam waktu 1 jam.

  • Standard: Objek dipulihkan dalam waktu 2 hingga 5 jam.

  • Bulk: Objek dipulihkan dalam waktu 5 hingga 12 jam.

Deep Cold Archive

  • Expedited: Objek dipulihkan dalam waktu 12 jam.

  • Standard: Objek dipulihkan dalam waktu 48 jam.

Pilih periode validitas replika

Periode validitas replika menentukan jumlah hari objek yang telah dipulihkan tetap dapat dibaca. Selama periode ini, Anda dapat mengakses objek kapan saja tanpa dikenai biaya pengambilan data tambahan. Rencanakan periode validitas yang sesuai dengan kebutuhan bisnis Anda. Untuk membaca objek hanya sekali, atur periode validitas menjadi 1 hari. Untuk mengakses objek secara berkala selama periode tertentu, atur periode validitas yang lebih lama agar menghindari biaya pemulihan berulang.

Kelas penyimpanan objek

Deskripsi

Archive

Bilangan bulat dari 1 hingga 7. Satuannya adalah hari.

Cold Archive

Bilangan bulat dari 1 hingga 365. Satuannya adalah hari.

Deep Cold Archive

Bilangan bulat dari 1 hingga 365. Satuannya adalah hari.

Lakukan pemulihan

Setelah menentukan prioritas pemulihan dan periode validitas replika, Anda dapat memulihkan objek tersebut.

Konsol

Konsol tidak mendukung pemulihan batch objek dalam folder. Untuk melakukan pemulihan batch, gunakan ossutil, kit pengembangan perangkat lunak (SDK), atau API.

  1. Masuk ke Konsol OSS.

  2. Klik Buckets. Lalu, klik nama bucket target.

  3. Di panel navigasi sebelah kiri, pilih Files > Objects.

  4. Di kolom Actions objek target, pilih more > Restore. Di kotak dialog yang muncul, konfigurasikan Restoration Priority dan Replica Validity Period.

SDK

Anda dapat menggunakan SDK untuk memulihkan objek dalam aplikasi Anda guna mendapatkan kontrol otomatisasi dan penanganan kesalahan yang lebih fleksibel.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek Archive. Jangan sertakan nama bucket dalam path lengkap. 
        String objectName = "exampledir/object";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);

            // Periksa apakah objek merupakan objek Archive. 
            StorageClass storageClass = objectMetadata.getObjectStorageClass();
            if (storageClass == StorageClass.Archive) {
                // Pulihkan objek. 
                ossClient.restoreObject(bucketName, objectName);

                // Tentukan waktu tunggu hingga objek dipulihkan. 
                do {
                    Thread.sleep(1000);
                    objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
                } while (!objectMetadata.isRestoreCompleted());
            }

            // Kueri objek yang telah dipulihkan. 
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            ossObject.getObjectContent().close();
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}           
import time
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="contoh pemulihan objek")
# Tambahkan argumen baris perintah yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.')
parser.add_argument('--key', help='Nama objek.', required=True)

def main():
    # Urai argumen baris perintah yang masuk.
    args = parser.parse_args()

    # Muat informasi autentikasi dari variabel lingkungan.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Gunakan konfigurasi SDK default.
    cfg = oss.config.load_default()
    # Atur penyedia kredensial ke autentikasi berbasis variabel lingkungan.
    cfg.credentials_provider = credentials_provider
    # Atur wilayah.
    cfg.region = args.region
    # Jika titik akhir disediakan, atur titik akhir sebagai item konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Buat klien OSS.
    client = oss.Client(cfg)

    # Jalankan permintaan untuk memulihkan objek.
    result = client.restore_object(oss.RestoreObjectRequest(
        bucket=args.bucket,
        key=args.key,
        restore_request=oss.RestoreRequest(
            days=1,
            # Opsional: Atur prioritas pemulihan untuk objek Cold Archive atau Deep Cold Archive. Nilai yang valid: Expedited, Standard, dan Bulk. Nilai default: Standard.
            # tier="Bulk",
        )
    ))

    # Cetak hasil permintaan pemulihan.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' ID versi: {result.version_id},'
          f' prioritas pemulihan: {result.restore_priority},'
    )

    # Lakukan loop untuk memeriksa apakah objek telah dipulihkan.
    while True:
        # Dapatkan header objek.
        result = client.head_object(oss.HeadObjectRequest(
            bucket=args.bucket,
            key=args.key,
        ))

        # Periksa status pemulihan.
        if result.restore and result.restore != 'ongoing-request="true"':
            print('Pemulihan berhasil')
            break
        # Periksa lagi setelah 5 detik.
        time.sleep(5)
        print(result.restore)

# Titik masuk program.
if __name__ == "__main__":
    main()
const OSS = require('ali-oss')

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou. 
  region: 'yourRegion',
  // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket. Contoh: examplebucket. 
  bucket: 'examplebucket',
});

// Tentukan nama objek Archive yang ingin Anda pulihkan. Contoh: exampleobject.txt. 
client.restore('exampleobject.txt').then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err);
})
using Aliyun.OSS;
using Aliyun.OSS.Model;
using Aliyun.OSS.Model;
using System.Net;
using System.Text;
using Aliyun.OSS.Common;

// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. 
var bucketName = "examplebucket";
// Tentukan path lengkap objek. Path tidak boleh berisi nama bucket. 
var objectName = "yourObjectName";
// Tentukan konten objek. 
var objectContent = "More than just cloud.";
int maxWaitTimeInSeconds = 600;
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Buat bucket Archive. 
    var bucket = client.CreateBucket(bucketName, StorageClass.Archive);
    Console.WriteLine("Pembuatan bucket Archive berhasil, {0} ", bucket.Name);
}
catch (Exception ex)
{
    Console.WriteLine("Pembuatan bucket Archive gagal, {0}", ex.Message);
}
// Unggah objek ke bucket dan atur kelas penyimpanan objek menjadi Archive. 
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Unggah objek berhasil, {0}", objectName);
}
catch (Exception ex)
{
    Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
}
var metadata = client.GetObjectMetadata(bucketName, objectName);
string storageClass = metadata.HttpMetadata["x-oss-storage-class"] as string;
if (storageClass != "Archive")
{
    Console.WriteLine("Kelas Penyimpanan adalah {0}", storageClass);
    return;
}
// Pulihkan objek Archive. 
RestoreObjectResult result = client.RestoreObject(bucketName, objectName);
Console.WriteLine("Hasil RestoreObject KodeStatusHttp : {0}", result.HttpStatusCode);
if (result.HttpStatusCode != HttpStatusCode.Accepted)
{
    throw new OssException(result.RequestId + ", " + result.HttpStatusCode + " ,");
}
while (maxWaitTimeInSeconds > 0)
{
    var meta = client.GetObjectMetadata(bucketName, objectName);
    string restoreStatus = meta.HttpMetadata["x-oss-restore"] as string;
    if (restoreStatus != null && restoreStatus.StartsWith("ongoing-request=\"false\"", StringComparison.InvariantCultureIgnoreCase))
    {
        break;
    }
    Thread.Sleep(1000);
    // Waktu tunggu maksimum berkurang 1 detik. 
    maxWaitTimeInSeconds--;
}
if (maxWaitTimeInSeconds == 0)
{
    Console.WriteLine("RestoreObject melebihi batas waktu. ");
    throw new TimeoutException();
}
else
{
    Console.WriteLine("RestoreObject berhasil. ");
}
// Pulihkan objek. 
RestoreObjectRequest restore = new RestoreObjectRequest();
// Tentukan nama bucket. Contoh: examplebucket. 
restore.setBucketName("examplebucket");
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampleobject.txt. 
restore.setObjectKey("exampleobject.txt");
OSSAsyncTask task = oss.asyncRestoreObject(restore, new OSSCompletedCallback<RestoreObjectRequest,
        RestoreObjectResult>() {
    @Override
    public void onSuccess(RestoreObjectRequest request, RestoreObjectResult result) {
        Log.i("info", "kode::"+result.getStatusCode());

    }

    @Override
    public void onFailure(RestoreObjectRequest request, ClientException clientException,
                          ServiceException serviceException) {
        Log.e("errorMessage", "kesalahan: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();
OSSRestoreObjectRequest *request = [OSSRestoreObjectRequest new];
// Tentukan nama bucket. Contoh: examplebucket. 
request.bucketName = @"examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampleobject.txt. 
request.objectKey = @"exampleobject.txt";

OSSTask *restoreObjectTask = [client restoreObject:request];
[restoreObjectTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
    if (!task.error) {
        NSLog(@"pemulihan objek berhasil");
    } else {
        NSLog(@"pemulihan objek gagal, kesalahan: %@", task.error);
    }
    return nil;
}];
// Implementasikan pemblokiran sinkron untuk menunggu tugas selesai. 
// [restoreObjectTask waitUntilFinished];
#include <alibabacloud/oss/OssClient.h>
#include <thread>
#include <chrono>
#include <algorithm>

using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */
    
    /* Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek Archive. Jangan sertakan nama bucket dalam path lengkap. */
    std::string ObjectName = "yourObjectName";
  
    /* Inisialisasi sumber daya seperti sumber daya jaringan. */
    InitializeSdk();
    
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
  
    /* Pulihkan objek Archive. */
    auto outcome = client.RestoreObject(BucketName, ObjectName);
    /* Anda tidak dapat memulihkan objek dengan kelas penyimpanan non-Archive. */
    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "RestoreObject gagal, kode:" << outcome.error().Code() <<
        ", pesan:" << outcome.error().Message() <<
        ", requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    std::string onGoingRestore("ongoing-request=\"false\"");
    int maxWaitTimeInSeconds = 600;
    while (maxWaitTimeInSeconds > 0)
    {
        auto meta = client.HeadObject(BucketName, ObjectName);
        std::string restoreStatus = meta.result().HttpMetaData()["x-oss-restore"];
        std::transform(restoreStatus.begin(), restoreStatus.end(), restoreStatus.begin(), ::tolower);
        if (!restoreStatus.empty() && 
        restoreStatus.compare(0, onGoingRestore.size(), onGoingRestore)==0) {
            std::cout << " berhasil, status pemulihan:" << restoreStatus << std::endl;
            /* Objek Archive telah dipulihkan. */
            break;
        }
        std::cout << " info, WaktuTunggu:" << maxWaitTimeInSeconds
        << "; status pemulihan:" << restoreStatus << std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(10));
        maxWaitTimeInSeconds--;     
    }
    if (maxWaitTimeInSeconds == 0)
    {
        std::cout << "RestoreObject gagal, TimeoutException" << std::endl;
    }
    /* Lepaskan sumber daya seperti sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Gunakan string char* untuk menginisialisasi data bertipe aos_string_t. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Tentukan dua parameter tambahan.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah akan menggunakan CNAME. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Tentukan parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di main() untuk menginisialisasi sumber daya global, seperti sumber daya jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Buat pool memori untuk mengelola memori. aos_pool_t setara dengan apr_pool_t. Kode untuk membuat pool memori termasuk dalam library APR. */
    aos_pool_t *pool;
    /* Buat pool memori. Nilai parameter kedua adalah NULL. Nilai ini menunjukkan bahwa pool tidak mewarisi pool memori lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan sumber daya memori dalam pool memori ke opsi. */  
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;   
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    headers = aos_table_make(pool, 0);
       
    /* Pulihkan objek. */
    do {
        headers = aos_table_make(pool, 0);
        resp_status = oss_restore_object(oss_client_options, &bucket, &object, headers, &resp_headers);
        printf("status resp_status pemulihan objek->kode: %d \n", resp_status->code);
        if (resp_status->code != 409) {
            break;
        } else {
            printf("pemulihan objek sedang berlangsung, resp_status->kode: %d \n", resp_status->code);
            apr_sleep(5000);
        }
    } while (1);
    /* Lepaskan pool memori. Operasi ini melepas sumber daya memori yang dialokasikan untuk permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}
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"
)

// Definisikan variabel global.
var (
	region     string // Wilayah penyimpanan.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Fungsi init menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Urai parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk memulihkan objek.
	request := &oss.RestoreObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		RestoreRequest: &oss.RestoreRequest{
			Days: 3, // Atur durasi status dipulihkan menjadi 3 hari.
		},
	}

	// Kirim permintaan untuk memulihkan objek.
	result, err := client.RestoreObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memulihkan objek %v", err)
	}

	// Cetak hasil operasi pemulihan.
	log.Printf("hasil pemulihan objek:%#v\n", result)
}
<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan dan jelaskan parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Wajib) Tentukan nama objek.
];

// Konversi deskripsi menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Urai parameter baris perintah.
$options = getopt("", $longopts);

// Periksa apakah parameter yang diperlukan telah dikonfigurasi.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Peroleh informasi bantuan untuk parameter.
        echo "Kesalahan: argumen berikut wajib diisi: --$key, $help" . PHP_EOL;
        exit(1); // Keluar dari program jika parameter wajib tidak ada.
    }
}

// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"];       // Nama objek.

// Muat kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika disediakan.
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Buat objek RestoreObjectRequest untuk memulihkan objek Archive.
$request = new Oss\Models\RestoreObjectRequest(bucket: $bucket, key: $key);

// Pulihkan objek.
$result = $client->restoreObject($request);

// Tampilkan hasilnya.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
    'ID permintaan:' . $result->requestId . PHP_EOL     // ID permintaan, yang dapat digunakan untuk debugging atau pelacakan permintaan.
);

ossutil

ossutil adalah antarmuka baris perintah (CLI) yang digunakan untuk mengelola OSS. Alat ini cocok untuk pemulihan batch yang diotomatisasi melalui skrip.

Untuk informasi selengkapnya, lihat restore (Pulihkan objek).

ossbrowser

ossbrowser mendukung operasi tingkat bucket yang mirip dengan yang didukung oleh konsol. Ikuti petunjuk di antarmuka ossbrowser untuk memulihkan objek. Untuk informasi selengkapnya, lihat Operasi umum.

API

Jika aplikasi Anda memiliki persyaratan khusus yang sangat tinggi, Anda dapat mengirim permintaan REST API secara langsung. Dalam hal ini, Anda harus menulis kode untuk menghitung tanda tangan. Untuk informasi selengkapnya, lihat RestoreObject.

Penagihan

Item yang ditagihkan

Deskripsi

Kelas penyimpanan yang berlaku

Biaya pengambilan data

Anda dikenai biaya satu kali berdasarkan volume data aktual (dalam GB) yang dipulihkan. Biaya ini merupakan biaya utama dari operasi pemulihan.

Archive, Cold Archive, dan Deep Cold Archive

Biaya permintaan

Anda dikenai biaya untuk setiap permintaan RestoreObject.

Archive (ditagih sebagai permintaan Put), Cold Archive, dan Deep Cold Archive (ditagih sebagai permintaan pengambilan)

Biaya penyimpanan

Selama dan setelah pemulihan, Anda dikenai biaya penyimpanan berdasarkan kelas penyimpanan yang sesuai.

Archive, Cold Archive, dan Deep Cold Archive

Biaya penyimpanan sementara

Replika sementara dihasilkan setelah pemulihan dan mengonsumsi ruang penyimpanan. Anda dikenai biaya untuk penyimpanan sementara ini setiap hari selama periode validitas replika.

Cold Archive dan Deep Cold Archive

Kuota dan batasan

  • Untuk satu Akun Alibaba Cloud di satu wilayah, kuota pemulihan referensi untuk objek Cold Archive adalah rata-rata 500 objek per detik. Kuota pemulihan total untuk ketiga prioritas pemulihan adalah 100 TB hingga 120 TB per hari.Jika bisnis Anda memerlukan kuota pemulihan yang lebih tinggi, hubungi Dukungan Teknis.

  • Untuk satu Akun Alibaba Cloud di satu wilayah, kuota pemulihan referensi untuk objek Deep Cold Archive adalah rata-rata 100 objek per detik. Kuota pemulihan total untuk dua prioritas pemulihan adalah 10 TB hingga 15 TB per hari.Jika bisnis Anda memerlukan kuota pemulihan yang lebih tinggi, hubungi Dukungan Teknis.

Catatan

Jika kuota pemulihan referensi untuk objek Cold Archive atau Deep Cold Archive terlampaui, Anda tetap dapat mengirim permintaan pemulihan. Permintaan tersebut akan ditambahkan ke antrian, dan pemulihan mungkin memerlukan waktu lebih lama daripada waktu yang ditentukan untuk prioritas yang dipilih.

FAQ