全部产品
Search
文档中心

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

更新时间:Nov 30, 2025

Topik ini menjelaskan cara mendaftar semua objek dalam bucket tertentu, mendaftar jumlah objek tertentu, serta mendapatkan ukuran total objek dalam folder tertentu.

Informasi latar belakang

Objek OSS diurutkan secara alfabetis. Anda dapat menggunakan OssClient.ListObjects untuk mendaftar objek dalam sebuah bucket. Metode ListObjects memiliki tiga bentuk parameter berikut:

  • ListObjectOutcome ListObjects(const std::string& bucket) const: Mendaftar objek dalam sebuah bucket. Maksimal 1.000 objek dapat dikembalikan dalam satu permintaan.

  • ListObjectOutcome ListObjects(const std::string& bucket, const std::string& prefix) const: Mendaftar objek yang memiliki awalan tertentu dalam sebuah bucket. Maksimal 1.000 objek dapat dikembalikan dalam satu permintaan.

  • ListObjectOutcome ListObjects(const ListObjectsRequest& request) const: Menyediakan beberapa fitur penyaringan untuk kueri fleksibel.

Tabel berikut menjelaskan parameter utama.

Parameter

Deskripsi

delimiter

Karakter yang digunakan untuk mengelompokkan nama objek. Semua objek yang namanya mengandung awalan tertentu dan muncul antara awalan tersebut hingga kemunculan pertama delimiter dikelompokkan sebagai satu set (commonPrefixes).

prefix

Menentukan bahwa objek yang dikembalikan harus memiliki awalan tertentu.

maxKeys

Jumlah maksimum objek yang dikembalikan dalam permintaan ini. Nilai default adalah 100. Nilai maksimum adalah 1.000.

marker

Mendaftar objek yang muncul setelah marker tertentu.

Catatan penggunaan

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya tentang 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.

  • Untuk mendaftar objek, Anda harus memiliki izin oss:ListObjects. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.

Daftar objek

Kode berikut memberikan contoh cara mendaftar objek dalam bucket tertentu. Secara default, 100 objek dikembalikan.

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

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

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan 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);

    /* Daftar objek. */
    ListObjectsRequest request(BucketName);
    auto outcome = client.ListObjects(request);

    if (!outcome.isSuccess())  {    
        /* Tangani pengecualian. */
        std::cout << "ListObjects gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;  
    }
    else {
        for (const auto& object : outcome.result().ObjectSummarys()) {
            std::cout << "objek"<<
            ",nama:" << object.Key() <<
            ",ukuran:" << object.Size() <<
            ",waktu modifikasi terakhir:" << object.LastModified() << std:: endl;
         }      
    }

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

Daftar jumlah objek tertentu

Kode berikut memberikan contoh cara mendaftar jumlah objek tertentu.

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

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

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan 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);

    /* Daftar objek. */
    ListObjectsRequest request(BucketName);
    /* Tetapkan jumlah maksimum objek yang akan didaftar menjadi 200. */
    request.setMaxKeys(200);
    auto outcome = client.ListObjects(request);

    if (!outcome.isSuccess( )) {    
        /* Tangani pengecualian. */
        std::cout << "ListObjects gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;  
    }
    else {
        for (const auto& object : outcome.result().ObjectSummarys()) {
            std::cout << "objek"<<
            ",nama:" << object.Key() <<
            ",ukuran:" << object.Size() <<
            ",waktu modifikasi terakhir:" << object.LastModified() << std ::endl; 
        }      
    }

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

Daftar objek dan subfolder dalam folder tertentu

Kode berikut memberikan contoh cara mendaftar objek dan subfolder dalam folder tertentu:

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

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan awalan objek yang akan didaftar. */
    std::string keyPrefix = "yourkeyPrefix";

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan 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);

    std::string nextMarker = "";
    bool isTruncated = false;  
    do {
        /* Daftar objek. */
        ListObjectsRequest request(BucketName);
         /* Tetapkan garis miring (/) sebagai pemisah folder. */
        request.setDelimiter("/");
        request.setPrefix(keyPrefix);
        request.setMarker(nextMarker);
        auto outcome = client.ListObjects(request);

        if (!outcome.isSuccess ()) {    
            /* Tangani pengecualian. */
            std::cout << "ListObjects gagal" <<
            ",kode:" << outcome.error().Code() <<
            ",pesan:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
            break;
        }  
        for (const auto& object : outcome.result().ObjectSummarys()) {
            std::cout << "objek"<<
            ",nama:" << object.Key() <<
            ",ukuran:" << object.Size() <<
            ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
        }
        for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
            std::cout << "commonPrefix" << ",nama:" << commonPrefix << std::endl;
        }
        nextMarker = outcome.result().NextMarker();
        isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

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

Daftar ukuran objek dalam folder tertentu

Kode berikut memberikan contoh cara mendapatkan ukuran total objek dalam folder tertentu:

#include <iostream>
#include <alibabacloud/oss/OssClient.h>

using namespace AlibabaCloud::OSS;

static int64_t calculateFolderLength(const OssClient &client, const std::string &bucketName, const std::string &folder)
{
    std::string nextMarker = "";
    bool isTruncated = false; 
    int64_t size = 0;
    do {
        /* Daftar objek. */
        ListObjectsRequest request(bucketName);
        request.setPrefix(folder);
        request.setMarker(nextMarker);
        auto outcome = client.ListObjects(request);
        if (!outcome.isSuccess()) {    
            /* Tangani pengecualian. */
            std::cout << "ListObjects gagal" <<
            ",kode:" << outcome.error().Code() <<
            ",pesan:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
            break;
        }  
        for (const auto& object : outcome.result().ObjectSummarys()) {
            size += object.Size();
        }
        nextMarker = outcome.result().NextMarker();
        isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);
    return size;
}

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
     /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan awalan objek yang akan didaftar. */
    std::string keyPrefix = "yourkeyPrefix";
	
    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan 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);
    std::string nextMarker = "";
    bool isTruncated = false; 
    do {
        /* Daftar objek. */
        ListObjectsRequest request(BucketName);
        /* Tetapkan garis miring (/) sebagai pemisah folder. */
        request.setDelimiter("/");
        request.setPrefix(keyPrefix);
        request.setMarker(nextMarker);
        auto outcome = client.ListObjects(request);
        if (!outcome.isSuccess()) {    
            /* Tangani pengecualian. */
            std::cout << "ListObjects gagal" <<
            ",kode:" << outcome.error().Code() <<
            ",pesan:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
            break;
        }  
        for (const auto& object : outcome.result().ObjectSummarys()) {
            std::cout << "objek" <<
            ",nama:" << object.Key() <<
            ",ukuran:" << object.Size() << std::endl;
        }
        for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
            int64_t foldersize = calculateFolderLength(client, BucketName, commonPrefix);
            std::cout << "folder" <<
            ",nama:" << commonPrefix <<
            ",ukuran:" << foldersize << std::endl;
        }
        nextMarker = outcome.result().NextMarker();
        isTruncated = outcome.result().IsTruncated(); 
    } while (isTruncated);
    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Daftar objek dengan awalan tertentu

Kode berikut memberikan contoh cara mendaftar objek yang memiliki awalan tertentu.

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

int main(void)
{
     /* Inisialisasi informasi akun OSS. */
               
     /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
     /* Tentukan nama bucket. Contoh: examplebucket. */
     std::string BucketName = "examplebucket";
     /* Tentukan awalan objek yang akan didaftar. */
     std::string keyPrefix = "yourkeyPrefix";

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

      ClientConfiguration conf;
      conf.signatureVersion = SignatureVersionType::V4;
      /* Dapatkan 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);
  
      std::string nextMarker = "";
      bool isTruncated = false; 
      do {
              /* Daftar objek. */
              ListObjectsRequest request(BucketName);              
              request.setPrefix(keyPrefix);
              request.setMarker(nextMarker);
              auto outcome = client.ListObjects(request);

              if (!outcome.isSuccess()) {    
                    /* Tangani pengecualian. */
                    std::cout << "ListObjects gagal" <<
                ",kode:" << outcome.error().Code() <<
                ",pesan:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                        break;
              }
            for (const auto& object : outcome.result().ObjectSummarys()) {
                  std::cout << "objek"<<
              ",nama:" << object.Key() <<
              ",ukuran:" << object.Size() <<
              ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
            }      
              nextMarker = outcome.result().NextMarker();
              isTruncated = outcome.result().IsTruncated();
      } while (isTruncated);

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

Daftar objek setelah marker tertentu

Parameter marker menentukan nama objek. Kode berikut memberikan contoh cara mendaftar objek yang muncul setelah marker tertentu.

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

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

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

      ClientConfiguration conf;
      conf.signatureVersion = SignatureVersionType::V4;
      /* Dapatkan 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);
      
    ListObjectOutcome outcome;
      do {
              /* Daftar objek. */
              ListObjectsRequest request(BucketName);
              /* Daftar objek yang muncul setelah marker tertentu. */
              request.setMarker(YourMarker);
              outcome = client.ListObjects(request);

              if (!outcome.isSuccess()) {    
                    /* Tangani pengecualian. */
                    std::cout << "ListObjects gagal" <<
                ",kode:" << outcome.error().Code() <<
                ",pesan:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                    break;  
              }
            YourMarker = outcome.result().NextMarker();
            for (const auto& object : outcome.result().ObjectSummarys()) {
                       std::cout << "objek"<<
                  ",nama:" << object.Key() <<
                ",ukuran:" << object.Size() <<
                ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
            }      
      } while (outcome.result().IsTruncated());

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

Tentukan encoding nama objek

Jika nama objek mengandung karakter khusus, Anda harus melakukan URL-encode pada nama objek tersebut untuk transmisi. OSS hanya mendukung URL encoding.

  • Tanda kutip tunggal (')

  • Tanda kutip ganda ("")

  • Ampersand (&)

  • Tanda kurung sudut (< >)

  • Huruf Tionghoa

Kode berikut memberikan contoh cara menentukan encoding untuk nama objek:

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

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

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan 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);

    std::string nextMarker = "";
    bool isTruncated = false; 
    do {
        /* Daftar objek. */
        ListObjectsRequest request(BucketName) ;
        /* Tentukan encoding nama objek. */
        request.setEncodingType("url");
        request.setMarker(nextMarker);
        auto outcome = client.ListObjects(request);

        if (!outcome.isSuccess() ) {    
            /* Tangani pengecualian. */
            std::cout << "ListObjects gagal" <<
            ",kode:" << outcome.error().Code() <<
            ",pesan:" << outcome.error().Message() <<
            ",requestId:" << outcome.error().RequestId() << std::endl;
            break; 
        }
        for (const auto& object : outcome.result().ObjectSummarys()) {
            std::cout << "objek"<<
            ",nama:" << object.Key() <<
            ",ukuran:" << object.Size() <<
            ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
        }      
        nextMarker = outcome.result().NextMarker();
        isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

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

Fitur folder

OSS tidak memiliki konsep folder. Semua elemen disimpan sebagai objek. Membuat folder sama dengan membuat objek berukuran nol byte yang diakhiri dengan garis miring (/). Objek ini dapat diunggah dan diunduh. Konsol OSS menampilkan objek yang diakhiri dengan garis miring (/) sebagai folder.

Anda dapat menggunakan parameter delimiter dan prefix untuk mensimulasikan fitur direktori:

  • Jika Anda menetapkan parameter prefix ke nama folder, objek yang namanya dimulai dengan awalan tersebut akan didaftar. Ini secara rekursif mendaftar semua objek dan subdirektori dalam folder tersebut.

  • Jika Anda menetapkan parameter prefix dan menetapkan parameter delimiter ke garis miring (/), hanya objek dan subdirektori di tingkat atas folder yang didaftar. Subdirektori dikembalikan dalam elemen CommonPrefixes, sedangkan objek dan folder di dalam subdirektori tersebut tidak didaftar.

Asumsikan sebuah bucket berisi objek oss.jpg, fun/test.jpg, fun/movie/001.avi, dan fun/movie/007.avi, dan pemisah folder adalah garis miring (/). Contoh berikut menunjukkan cara mendaftar objek dengan mensimulasikan direktori.

  • Daftar semua objek dalam bucket

    Kode berikut memberikan contoh cara mendaftar semua objek dalam bucket tertentu.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Inisialisasi informasi akun OSS. */
                
        /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
        /* Tentukan nama bucket. Contoh: examplebucket. */
        std::string BucketName = "examplebucket";
    
        /* Inisialisasi sumber daya jaringan. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Dapatkan 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);
    
        std::string nextMarker = "";
        bool isTruncated = false; 
        do {
            /* Daftar objek. */
            ListObjectsRequest request(BucketName);
            request.setMarker(nextMarker);
            auto outcome = client.ListObjects(request);
    
            if (!outcome.isSuccess()) {    
                /* Tangani pengecualian. */
                std::cout << "ListObjects gagal" <<
                ",kode:" << outcome.error().Code() <<
                ",pesan:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                ShutdownSdk();
                return -1;  
            }
            else {
                for (const auto& object : outcome.result().ObjectSummarys()) {
                    std::cout << "objek"<<
                    ",nama:" << object.Key() <<
                    ",ukuran:" << object.Size() <<
                    ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
                }      
            }
            nextMarker = outcome.result().NextMarker();
            isTruncated = outcome.result().IsTruncated();
        } while (isTruncated);
    
        /* Lepaskan sumber daya jaringan. */
        ShutdownSdk();
        return 0;
    }

    Hasil berikut dikembalikan:

    Objects:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    oss.jpg
    
    CommonPrefixes:
  • Daftar semua objek dalam folder tertentu

    Kode berikut memberikan contoh cara mendaftar semua objek dalam folder tertentu.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Inisialisasi informasi akun OSS. */
                
        /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
        /* Tentukan nama bucket. Contoh: examplebucket. */
        std::string BucketName = "examplebucket";
    
        /* Inisialisasi sumber daya jaringan. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Dapatkan 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);
    
        std::string nextMarker = "";
        bool isTruncated = false; 
        do {
                /* Daftar objek. */
                ListObjectsRequest request(BucketName);
                request.setPrefix("fun/");
                request.setMarker(nextMarker);
                auto outcome = client.ListObjects(request);
    
                if (!outcome.isSuccess()) {    
                    /* Tangani pengecualian. */
                    std::cout << "ListObjects gagal" <<
                    ",kode:" << outcome.error().Code() <<
                    ",pesan:" << outcome.error().Message() <<
                    ",requestId:" << outcome.error().RequestId() << std::endl;
                    break;
                }  
                for (const auto& object : outcome.result().ObjectSummarys()) {
                    std::cout << "objek"<<
                    ",nama:" << object.Key() <<
                    ",ukuran:" << object.Size() <<
                    ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
                }
                for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
                    std::cout << "commonPrefix" << ",nama:" << commonPrefix << std::endl;
                }
                nextMarker = outcome.result().NextMarker();
                isTruncated = outcome.result().IsTruncated();
        } while (isTruncated);
    
        /* Lepaskan sumber daya jaringan. */
        ShutdownSdk();
        return 0;
    }

    Hasil berikut dikembalikan:

    Objects:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    
    CommonPrefixes:
  • Daftar objek dan subfolder dalam folder

    Kode berikut memberikan contoh cara mendaftar objek dan subfolder dalam folder tertentu.

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        /* Inisialisasi informasi akun OSS. */
                
        /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
        /* Tentukan nama bucket. Contoh: examplebucket. */
        std::string BucketName = "examplebucket";
    
        /* Inisialisasi sumber daya jaringan. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Dapatkan 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);
    
        std::string nextMarker = "";
        bool isTruncated = false;
        do {
                /* Daftar objek. */
                ListObjectsRequest request(BucketName);
                /* Tetapkan garis miring (/) sebagai pemisah folder. */
                request.setDelimiter("/");
                request.setPrefix("fun/");
                request.setMarker(nextMarker);
                auto outcome = client.ListObjects(request);
    
                if (!outcome.isSuccess()) {    
                    /* Tangani pengecualian. */
                    std::cout << "ListObjects gagal" <<
                    ",kode:" << outcome.error().Code() <<
                    ",pesan:" << outcome.error().Message() <<
                    ",requestId:" << outcome.error().RequestId() << std::endl;
                    break;
                }  
                for (const auto& object : outcome.result().ObjectSummarys()) {
                    std::cout << "objek"<<
                    ",nama:" << object.Key() <<
                    ",ukuran:" << object.Size() <<
                    ",waktu modifikasi terakhir:" << object.LastModified() << std::endl;
                }
                for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
                    std::cout << "commonPrefix" << ",nama:" << commonPrefix << std::endl;
                }
                nextMarker = outcome.result().NextMarker();
                isTruncated = outcome.result().IsTruncated();
        } while (isTruncated);
    
        /* Lepaskan sumber daya jaringan. */
        ShutdownSdk();
        return 0;
    }

    Hasil berikut dikembalikan:

    Objects:
    fun/test.jpg
    
    CommonPrefixes:
    fun/movie/
  • Daftar ukuran objek dalam folder tertentu

    Kode berikut memberikan contoh cara mendapatkan ukuran total objek dalam folder tertentu:

    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
    
    static int64_t calculateFolderLength (const OssClient &client, const std::string &bucketName, const std::string &folder)
    {
        std::string nextMarker = "";
        bool isTruncated = false;
        int64_t size = 0;
        do {
                /* Daftar objek. */
                ListObjectsRequest request(bucketName);
                request.setPrefix(folder);
                request.setMarker(nextMarker);
                auto outcome = client.ListObjects(request);
    
                if (!outcome.isSuccess()) {    
                    /* Tangani pengecualian. */
                    std::cout << "ListObjects gagal" <<
                    ",kode:" << outcome.error().Code() <<
                    ",pesan:" << outcome.error().Message() <<
                    ",requestId:" << outcome.error().RequestId() << std::endl;
                    break;
                }  
    
                for (const auto& object : outcome.result().ObjectSummarys()) {
                    size += object.Size();
                }
    
                nextMarker = outcome.result().NextMarker();
                isTruncated = outcome.result().IsTruncated();
            } while (isTruncated);
    
          return size;
    }
    
    int main(void)
    {   
        /* Inisialisasi informasi akun OSS. */
                
        /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint 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";
        /* Tentukan nama bucket. Contoh: examplebucket. */
        std::string BucketName = "examplebucket";
    
        /* Inisialisasi sumber daya jaringan. */
        InitializeSdk();
    
        ClientConfiguration conf;
        conf.signatureVersion = SignatureVersionType::V4;
        /* Dapatkan 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);
    
        std::string nextMarker = "";
        bool isTruncated = false;
        do {
            /* Daftar objek. */
            ListObjectsRequest request(BucketName);
            /* Tetapkan garis miring (/) sebagai pemisah folder. */
            request.setDelimiter("/");
            request.setPrefix("fun/");
            request.setMarker(nextMarker);
            auto outcome = client.ListObjects(request);
    
            if (!outcome.isSuccess()) {    
                /* Tangani pengecualian. */
                std::cout << "ListObjects gagal" <<
                ",kode:" << outcome.error().Code() <<
                ",pesan:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                break;
            }  
    
            for (const auto& object : outcome.result().ObjectSummarys()) {
                std::cout << "objek" <<
                ",nama:" << object.Key() <<
                ",ukuran:" << object.Size() << std::endl;
            }
    
            for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
                int64_t foldersize = calculateFolderLength(client, BucketName, commonPrefix);
                std::cout << "folder" <<
                ",nama:" << commonPrefix <<
                ",ukuran:" << foldersize << std::endl;
            }
            nextMarker = outcome.result().NextMarker();
            isTruncated = outcome.result().IsTruncated();
        } while (isTruncated);
    
        /* Lepaskan sumber daya jaringan. */
        ShutdownSdk();
        return 0;
    }

Referensi