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
Untuk kode contoh lengkap yang digunakan untuk mendaftar objek, lihat contoh GitHub.
Untuk informasi selengkapnya tentang operasi API yang digunakan untuk mendaftar objek, lihat GetBucket (ListObjects) dan ListObjectsV2 (GetBucketV2).