All Products
Search
Document Center

Object Storage Service:Memulihkan objek terarsip (C SDK)

Last Updated:Nov 30, 2025

Anda harus memulihkan objek terarsip sebelum dapat membacanya. Topik ini menjelaskan cara melakukan operasi tersebut.

Catatan penggunaan

  • Metode RestoreObject hanya berlaku untuk objek terarsip.

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization (C SDK).

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

Kode contoh

Kode berikut menunjukkan contoh cara memulihkan objek terarsip.

#include "oss_api.h"
#include "aos_http_io.h"
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah ditetapkan. */
    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"));
    // Konfigurasikan dua parameter berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah CNAME digunakan. 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Tetapkan 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 pada entri program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Pool memori untuk manajemen memori. Ini setara dengan apr_pool_t. Kode implementasinya berada di pustaka apr. */
    aos_pool_t *pool;
    /* Buat pool memori. Parameter kedua adalah NULL, yang menunjukkan bahwa pool memori baru tidak mewarisi dari pool memori lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini berisi informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori untuk opsi dalam pool memori. */  
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien 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("restore object resp_status->code: %d \n", resp_status->code);
        if (resp_status->code != 409) {
            break;
        } else {
            printf("pemulihan objek sedang berlangsung, resp_status->code: %d \n", resp_status->code);
            apr_sleep(5000);
        }
    } while (1);
    /* Hancurkan pool memori. Ini akan melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang sebelumnya dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Referensi

Untuk informasi selengkapnya mengenai operasi API RestoreObject, lihat RestoreObject.