全部产品
Search
文档中心

Object Storage Service:Daftar Bucket (C++ SDK)

更新时间:Nov 30, 2025

Topik ini menjelaskan cara menambahkan, melihat, mencantumkan, dan menghapus konfigurasi daftar bucket.

Catatan

  • Pada topik ini digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin 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 Wilayah dan titik akhir.

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

  • Pastikan Anda memiliki izin untuk menambahkan, melihat, mencantumkan, dan menghapus konfigurasi daftar bucket. Secara default, pemilik bucket memiliki izin tersebut. Jika Anda tidak memilikinya, mintalah kepada pemilik bucket.

  • Satu bucket dapat memiliki maksimal 1.000 konfigurasi daftar inventaris.

  • Bucket sumber untuk konfigurasi inventaris dan bucket tujuan untuk file manifest yang diekspor harus berada di wilayah yang sama.

Tambahkan konfigurasi inventaris

Kode berikut menunjukkan cara menambahkan konfigurasi inventaris ke bucket:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* 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. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi jaringan dan sumber daya lainnya. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    InventoryConfiguration inventoryConf;
    /* Tentukan nama aturan inventaris. Nama harus unik secara global dalam bucket. */
    inventoryConf.setId("inventoryId");

    /* Bendera yang menentukan apakah konfigurasi inventaris diaktifkan. Nilai yang valid: true dan false. */
    inventoryConf.setIsEnabled(true);

    /* (Opsional) Awalan untuk memfilter objek. Setelah Anda menentukan awalan, daftar inventaris hanya akan mencantumkan objek yang sesuai dengan awalan tersebut. */
    inventoryConf.setFilter(InventoryFilter("objectPrefix"));

    InventoryOSSBucketDestination dest;
    /* Format file dari file manifest yang diekspor. */
    dest.setFormat(InventoryFormat::CSV);
    /* UID akun pemilik bucket. */
    dest.setAccountId("10988548********");
    /* Tentukan nama role. Role tersebut harus memiliki izin untuk membaca semua file dari bucket sumber dan menulis file ke bucket tujuan. Formatnya adalah acs:ram::uid:role/rolename. */
    dest.setRoleArn("acs:ram::10988548********:role/inventory-test");
    /* Bucket tempat file manifest yang diekspor disimpan. */
    dest.setBucket("yourDstBucketName");
    /* Awalan jalur penyimpanan untuk file manifest. */
    dest.setPrefix("yourPrefix");
    /* (Opsional) Metode enkripsi untuk file manifest. Anda dapat mengenkripsi file menggunakan SSE-OSS atau SSE-KMS. */
    //dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
    //dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
    inventoryConf.setDestination(dest);

    /* Frekuensi ekspor file manifest. Nilai yang valid: Daily dan Weekly. */
    inventoryConf.setSchedule(InventoryFrequency::Daily);

    /* Menentukan apakah informasi versi objek disertakan dalam inventaris. Nilai yang valid: All dan Current. */
    inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);

    /* (Opsional) Tetapkan item konfigurasi yang akan disertakan dalam hasil inventaris. Konfigurasikan sesuai kebutuhan. */
    InventoryOptionalFields field { 
        InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate, 
        InventoryOptionalField::ETag, InventoryOptionalField::StorageClass, 
        InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
    };
    inventoryConf.setOptionalFields(field);

    /* Tetapkan konfigurasi inventaris. */
    auto outcome = client.SetBucketInventoryConfiguration(
        SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "Set Bucket Inventory fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan jaringan dan sumber daya lainnya. */
    ShutdownSdk();
    return 0;
}

Lihat konfigurasi inventaris

Kode berikut menunjukkan cara melihat konfigurasi inventaris bucket:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* 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. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Masukkan nama aturan inventaris. */
    std::string InventoryId = "yourInventoryId";

    /* Inisialisasi jaringan dan sumber daya lainnya. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Dapatkan konfigurasi inventaris. */
    auto outcome = client.GetBucketInventoryConfiguration(
        GetBucketInventoryConfigurationRequest(BucketName, InventoryId));

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "Get Bucket Inventory fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Cetak informasi konfigurasi inventaris. */
    const auto& inventoryConf = outcome.result().InventoryConfiguration();
    std::cout << inventoryConf.Id() << std::endl;
    std::cout << inventoryConf.IsEnabled() << std::endl;
    std::cout << inventoryConf.Filter().Prefix() << std::endl;
    std::cout << inventoryConf.Destination().OSSBucketDestination().AccountId() << std::endl;
    std::cout << inventoryConf.Destination().OSSBucketDestination().RoleArn() << std::endl;
    std::cout << inventoryConf.Destination().OSSBucketDestination().Bucket() << std::endl;
    std::cout << inventoryConf.Destination().OSSBucketDestination().Prefix() << std::endl;
    if (inventoryConf.Destination().OSSBucketDestination().Encryption().hasSSEKMS()) {
        std::cout << inventoryConf.Destination().OSSBucketDestination().Encryption().SSEKMS().KeyId() << std::endl;
    }
    else if (inventoryConf.Destination().OSSBucketDestination().Encryption().hasSSEOSS()) {
        std::cout << "has sse-oss" << std::endl;
    }

    std::cout << static_cast<int>(inventoryConf.Schedule()) << std::endl;
    std::cout << static_cast<int>(inventoryConf.IncludedObjectVersions()) << std::endl;

    for (const auto& field: inventoryConf.OptionalFields()) {
        std::cout << static_cast<int>(field) << std::endl;
    }

    /* Lepaskan jaringan dan sumber daya lainnya. */
    ShutdownSdk();
    return 0;
}

Cantumkan konfigurasi inventaris

Catatan

Satu permintaan dapat mengambil maksimal 100 konfigurasi inventaris. Untuk mengambil lebih dari 100 konfigurasi, Anda harus mengirimkan beberapa permintaan. Gunakan token yang dikembalikan dari permintaan sebelumnya sebagai parameter untuk permintaan berikutnya.

Kode berikut menunjukkan cara mencantumkan konfigurasi inventaris bucket:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* 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. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi jaringan dan sumber daya lainnya. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Tetapkan parameter permintaan. */
    std::string nextToken = "";
    bool isTruncated = false;
    do {
        /* Cantumkan konfigurasi inventaris. Setiap permintaan mengembalikan maksimal 100 catatan. */
        auto request = ListBucketInventoryConfigurationsRequest(BucketName);
        request.setContinuationToken(nextToken);
        auto outcome = client.ListBucketInventoryConfigurations(request);

        if (!outcome.isSuccess()) {    
            /*Tangani pengecualian.*/
            std::cout << "ListObjects fail" <<
                ",code:" << outcome.error().Code() <<
                ",message:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
            break;
        }

        for (const auto& inventoryConf : outcome.result().InventoryConfigurationList()) {
            std::cout << inventoryConf.Id() << std::endl;
            std::cout << inventoryConf.IsEnabled() << std::endl;
            std::cout << inventoryConf.Filter().Prefix() << std::endl;
            std::cout << inventoryConf.Destination().OSSBucketDestination().AccountId() << std::endl;
            std::cout << inventoryConf.Destination().OSSBucketDestination().RoleArn() << std::endl;
            std::cout << inventoryConf.Destination().OSSBucketDestination().Bucket() << std::endl;
            std::cout << inventoryConf.Destination().OSSBucketDestination().Prefix() << std::endl;
            if (inventoryConf.Destination().OSSBucketDestination().Encryption().hasSSEKMS()) {
                std::cout << inventoryConf.Destination().OSSBucketDestination().Encryption().SSEKMS().KeyId() << std::endl;
            }
            else if (inventoryConf.Destination().OSSBucketDestination().Encryption().hasSSEOSS()) {
                std::cout << "has sse-oss" << std::endl;
            }

            std::cout << static_cast<int>(inventoryConf.Schedule()) << std::endl;
            std::cout << static_cast<int>(inventoryConf.IncludedObjectVersions()) << std::endl;

            for (const auto& field: inventoryConf.OptionalFields()) {
                std::cout << static_cast<int>(field) << std::endl;
            }
        }

        nextToken = outcome.result().NextContinuationToken();
        isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

    /* Lepaskan jaringan dan sumber daya lainnya. */
    ShutdownSdk();
    return 0;
}

Hapus konfigurasi inventaris

Kode berikut menunjukkan cara menghapus konfigurasi inventaris bucket:

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* 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. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Masukkan nama aturan inventaris. */
    std::string InventoryId = "yourInventoryId";

    /* Inisialisasi jaringan dan sumber daya lainnya. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Hapus konfigurasi inventaris. */
    auto outcome = client.DeleteBucketInventoryConfiguration(
        DeleteBucketInventoryConfigurationRequest(BucketName, InventoryId));;

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "Delete Bucket Inventory fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
    }

    /* Lepaskan jaringan dan sumber daya lainnya. */
    ShutdownSdk();
    return 0;
}

Referensi

  • Untuk informasi selengkapnya mengenai operasi API untuk menambahkan konfigurasi inventaris bucket, lihat PutBucketInventory.

  • Untuk informasi selengkapnya mengenai operasi API untuk melihat konfigurasi inventaris bucket, lihat GetBucketInventory.

  • Untuk informasi selengkapnya mengenai operasi API untuk mencantumkan konfigurasi inventaris bucket, lihat ListBucketInventory.

  • Untuk informasi selengkapnya mengenai operasi API untuk menghapus konfigurasi inventaris bucket, lihat DeleteBucketInventory.