このトピックでは、バケット内のすべてのオブジェクトと特定の数のオブジェクトを一覧表示する方法、およびバケットのディレクトリ内のオブジェクトのサイズを一覧表示する方法について説明します。
背景情報
オブジェクトはオブジェクト名でアルファベット順にリストされます。 OssClient.ListObjectsを使用して、バケット内のオブジェクトを一覧表示できます。 ListObjectsは、次のタイプのパラメーター形式をサポートします。
ListObjectOutcome ListObjects(const std::string& bucket) const: バケット内のオブジェクトをリストします。 最大1,000個のオブジェクトを一覧表示できます。
ListObjectOutcome ListObjects(const std::string& bucket, const std::string& prefix) const: バケット内の指定されたプレフィックスを含むオブジェクトを一覧表示します。 最大1,000個のオブジェクトを一覧表示できます。
ListObjectOutcome ListObjects(const ListObjectsRequest& request) const: オブジェクトを照会するための複数のフィルタ条件を提供する。
次の表に、オブジェクトを一覧表示するために設定できるパラメーターを示します。
パラメーター | 説明 |
区切り文字 | オブジェクトを名前でグループ化するために使用される文字。 指定されたプレフィックスから初めて表示される区切り文字までの同じ文字列を名前に含むオブジェクトは、commonPrefixes要素としてグループ化されます。 |
プレフィックス | 返されるオブジェクトの名前に含める必要があるプレフィックス。 |
maxKeys | 一度に一覧表示できるオブジェクトの最大数。 最大値は 1000 です。 デフォルト値:100 |
マーカー | リスト操作の開始位置。 markerの値の後に名前がアルファベット順に表示されるすべてのオブジェクトが一覧表示されます。 |
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトを一覧表示するには、
oss:ListObjects
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
簡易一覧表示
次のコードでは、単純なリストを使用してバケット内のオブジェクトを一覧表示する方法の例を示します。 デフォルトでは、最大100個のオブジェクトが一覧表示されます。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* List objects. */
ListObjectsRequest request(BucketName);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std:: endl;
}
}
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
特定の数のオブジェクトを一覧表示する
次のコードは、特定の数のオブジェクトを一覧表示する方法の例を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* List objects. */
ListObjectsRequest request(BucketName);
/* Set the maximum number of objects that you want to return to 200. */
request.setMaxKeys(200);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess( )) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std ::endl;
}
}
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
ディレクトリ内のオブジェクトとサブディレクトリの一覧表示
次のコードは、バケットのディレクトリ内のオブジェクトとサブディレクトリを一覧表示する方法の例を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the prefix that must be included in the names of the objects you want to list. */
std::string keyPrefix = "yourkeyPrefix";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
std::string nextMarker = "";
bool isTruncated = false;
do {
/* List objects. */
ListObjectsRequest request(BucketName);
/* Set the delimiter to a forward slash (/). */
request.setDelimiter("/");
request.setPrefix(keyPrefix);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess ()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std::endl;
}
for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
std::cout << "commonPrefix" << ",name:" << commonPrefix << std::endl;
}
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
ディレクトリ内のオブジェクトのサイズを一覧表示する
次のコードでは、ディレクトリ内のオブジェクトのサイズを一覧表示する方法の例を示します。
#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 {
/* List objects. */
ListObjectsRequest request(bucketName);
request.setPrefix(folder);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << 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)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the prefix that must be included in the names of the objects you want to list. */
std::string keyPrefix = "yourkeyPrefix";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
std::string nextMarker = "";
bool isTruncated = false;
do {
/* List objects. */
ListObjectsRequest request(BucketName);
/* Set the delimiter to a forward slash (/). */
request.setDelimiter("/");
request.setPrefix(keyPrefix);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object" <<
",name:" << object.Key() <<
",size:" << object.Size() << std::endl;
}
for (const auto& commonPrefix : outcome.result().CommonPrefixes()) {
int64_t foldersize = calculateFolderLength(client, BucketName, commonPrefix);
std::cout << "folder" <<
",name:" << commonPrefix <<
",size:" << foldersize << std::endl;
}
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
指定されたプレフィックスを名前に含むオブジェクトを一覧表示する
次のコードは、名前に指定されたプレフィックスが含まれるオブジェクトを一覧表示する方法の例を示します。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the prefix that must be included in the names of the objects you want to list. */
std::string keyPrefix = "yourkeyPrefix";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
std::string nextMarker = "";
bool isTruncated = false;
do {
/* List objects. */
ListObjectsRequest request(BucketName);
request.setPrefix(keyPrefix);
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std::endl;
}
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
markerの値の後に名前がアルファベット順に表示されるオブジェクトを一覧表示します。
リスト操作を開始するオブジェクトの名前は、markerパラメーターで指定します。 次のコードは、名前がmarkerパラメーターの値の後にアルファベット順になっているオブジェクトを一覧表示する方法の例を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Specify the value of marker. */
std::string YourMarker = "yourMarker";
/* Initialize resources such as network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
ListObjectOutcome outcome;
do {
/* List objects. */
ListObjectsRequest request(BucketName);
/* List objects whose names are alphabetically after the value of marker. */
request.setMarker(YourMarker);
outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
YourMarker = outcome.result().NextMarker();
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std::endl;
}
} while (outcome.result().IsTruncated());
/* Release network resources. */
ShutdownSdk();
return 0;
}
指定されたエンコーディングタイプで名前がエンコードされているオブジェクトを一覧表示する
次のいずれかの特殊文字を含むオブジェクト名は、オブジェクトを送信する前にエンコードする必要があります。 OSSではURLエンコードのみがサポートされています。
一重引用符 (')
二重引用符 (")
アンパサンド (&)
アングルブラケット (<>)
漢字、平仮名、片仮名
次のコードでは、指定したエンコードタイプで名前がエンコードされているオブジェクトを一覧表示する方法の例を示します。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Initialize information about the account that is used to access OSS. */
/* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */
std::string Region = "yourRegion";
/* Specify the name of the bucket. Example: examplebucket. */
std::string BucketName = "examplebucket";
/* Initialize network resources. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
std::string nextMarker = "";
bool isTruncated = false;
do {
/* List objects. */
ListObjectsRequest request(BucketName) ;
/* Specify the encoding type of the object names. */
request.setEncodingType("url");
request.setMarker(nextMarker);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess() ) {
/* Handle exceptions. */
std::cout << "ListObjects fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
break;
}
for (const auto& object : outcome.result().ObjectSummarys()) {
std::cout << "object"<<
",name:" << object.Key() <<
",size:" << object.Size() <<
",lastmodify time:" << object.LastModified() << std::endl;
}
nextMarker = outcome.result().NextMarker();
isTruncated = outcome.result().IsTruncated();
} while (isTruncated);
/* Release resources such as network resources. */
ShutdownSdk();
return 0;
}
ディレクトリ内のオブジェクトの一覧表示
OSSはフラット構造を使用してオブジェクトを格納します。 ディレクトリは、名前がスラッシュ (/) で終わるゼロバイトのオブジェクトです。 ディレクトリをアップロードおよびダウンロードできます。 デフォルトでは、名前がスラッシュ (/) で終わるオブジェクトは、OSSコンソールにディレクトリとして表示されます。
デリミタとプレフィックスパラメータを指定して、ディレクトリごとにオブジェクトを一覧表示できます。
リクエストでプレフィックスをディレクトリ名に設定すると、プレフィックスを含む名前のオブジェクトとサブディレクトリが一覧表示されます。
リクエストでプレフィックスを指定し、区切り文字をスラッシュ (/) に設定すると、ディレクトリ内で指定されたプレフィックスで始まる名前のオブジェクトとサブディレクトリが一覧表示されます。 各サブディレクトリは、CommonPrefixesで単一の結果要素としてリストされます。 これらのサブディレクトリ内のオブジェクトおよびディレクトリはリストされません。
たとえば、バケットにはoss.jpg
、fun/test.jpg
、fun/movie/001.avi
、fun/movie/007.avi
のオブジェクトが含まれています。 ディレクトリ区切り文字としてスラッシュ (/) を指定します。 次の例では、シミュレートされたディレクトリにオブジェクトを一覧表示します。
バケット内のすべてのオブジェクトの一覧表示
次のコードは、バケット内のすべてのオブジェクトを一覧表示する方法の例を示しています。
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* Initialize information about the account that is used to access OSS. */ /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */ std::string Endpoint = "yourEndpoint"; /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */ std::string Region = "yourRegion"; /* Specify the name of the bucket. Example: examplebucket. */ std::string BucketName = "examplebucket"; /* Initialize resources such as network resources. */ InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); client.SetRegion(Region); std::string nextMarker = ""; bool isTruncated = false; do { /* List objects. */ ListObjectsRequest request(BucketName); request.setMarker(nextMarker); auto outcome = client.ListObjects(request); if (!outcome.isSuccess()) { /* Handle exceptions. */ std::cout << "ListObjects fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; ShutdownSdk(); return -1; } else { for (const auto& object : outcome.result().ObjectSummarys()) { std::cout << "object"<< ",name:" << object.Key() << ",size:" << object.Size() << ",lastmodify time:" << object.LastModified() << std::endl; } } nextMarker = outcome.result().NextMarker(); isTruncated = outcome.result().IsTruncated(); } while (isTruncated); /* Release resources such as network resources. */ ShutdownSdk(); return 0; }
次のオブジェクトが返されます。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg oss.jpg CommonPrefixes:
ディレクトリ内のすべてのオブジェクトを一覧表示する
次のコードでは、ディレクトリ内のすべてのオブジェクトを一覧表示する方法の例を示します。
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* Initialize information about the account that is used to access OSS. */ /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */ std::string Endpoint = "yourEndpoint"; /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */ std::string Region = "yourRegion"; /* Specify the name of the bucket. Example: examplebucket. */ std::string BucketName = "examplebucket"; /* Initialize resources such as network resources. */ InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); client.SetRegion(Region); std::string nextMarker = ""; bool isTruncated = false; do { /* List objects. */ ListObjectsRequest request(BucketName); request.setPrefix("fun/"); request.setMarker(nextMarker); auto outcome = client.ListObjects(request); if (!outcome.isSuccess()) { /* Handle exceptions. */ std::cout << "ListObjects fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; break; } for (const auto& object : outcome.result().ObjectSummarys()) { std::cout << "object"<< ",name:" << object.Key() << ",size:" << object.Size() << ",lastmodify time:" << object.LastModified() << std::endl; } for (const auto& commonPrefix : outcome.result().CommonPrefixes()) { std::cout << "commonPrefix" << ",name:" << commonPrefix << std::endl; } nextMarker = outcome.result().NextMarker(); isTruncated = outcome.result().IsTruncated(); } while (isTruncated); /* Release resources such as network resources. */ ShutdownSdk(); return 0; }
次のオブジェクトが返されます。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg CommonPrefixes:
ディレクトリ内のオブジェクトとサブディレクトリの一覧表示
次のコードは、ディレクトリ内のオブジェクトとサブディレクトリを一覧表示する方法の例を示しています。
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* Initialize information about the account that is used to access OSS. */ /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */ std::string Endpoint = "yourEndpoint"; /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */ std::string Region = "yourRegion"; /* Specify the name of the bucket. Example: examplebucket. */ std::string BucketName = "examplebucket"; /* Initialize resources such as network resources. */ InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); client.SetRegion(Region); std::string nextMarker = ""; bool isTruncated = false; do { /* List objects. */ ListObjectsRequest request(BucketName); /* Set the delimiter to a forward slash (/). */ request.setDelimiter("/"); request.setPrefix("fun/"); request.setMarker(nextMarker); auto outcome = client.ListObjects(request); if (!outcome.isSuccess()) { /* Handle exceptions. */ std::cout << "ListObjects fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; break; } for (const auto& object : outcome.result().ObjectSummarys()) { std::cout << "object"<< ",name:" << object.Key() << ",size:" << object.Size() << ",lastmodify time:" << object.LastModified() << std::endl; } for (const auto& commonPrefix : outcome.result().CommonPrefixes()) { std::cout << "commonPrefix" << ",name:" << commonPrefix << std::endl; } nextMarker = outcome.result().NextMarker(); isTruncated = outcome.result().IsTruncated(); } while (isTruncated); /* Release resources such as network resources. */ ShutdownSdk(); return 0; }
次のオブジェクトが返されます。
Objects: fun/test.jpg CommonPrefixes: fun/movie/
ディレクトリ内のオブジェクトのサイズを一覧表示する
次のコードでは、ディレクトリ内のオブジェクトのサイズを一覧表示する方法の例を示します。
#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 { /* List objects. */ ListObjectsRequest request(bucketName); request.setPrefix(folder); request.setMarker(nextMarker); auto outcome = client.ListObjects(request); if (!outcome.isSuccess()) { /* Handle exceptions. */ std::cout << "ListObjects fail" << ",code:" << outcome.error().Code() << ",message:" << 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) { /* Initialize information about the account that is used to access OSS. */ /* Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */ std::string Endpoint = "yourEndpoint"; /* Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. */ std::string Region = "yourRegion"; /* Specify the name of the bucket. Example: examplebucket. */ std::string BucketName = "examplebucket"; /* Initialize network resources. */ InitializeSdk(); ClientConfiguration conf; conf.signatureVersion = SignatureVersionType::V4; /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */ auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); OssClient client(Endpoint, credentialsProvider, conf); client.SetRegion(Region); std::string nextMarker = ""; bool isTruncated = false; do { /* List objects. */ ListObjectsRequest request(BucketName); /* Set the delimiter to a forward slash (/). */ request.setDelimiter("/"); request.setPrefix("fun/"); request.setMarker(nextMarker); auto outcome = client.ListObjects(request); if (!outcome.isSuccess()) { /* Handle exceptions. */ std::cout << "ListObjects fail" << ",code:" << outcome.error().Code() << ",message:" << outcome.error().Message() << ",requestId:" << outcome.error().RequestId() << std::endl; break; } for (const auto& object : outcome.result().ObjectSummarys()) { std::cout << "object" << ",name:" << object.Key() << ",size:" << object.Size() << std::endl; } for (const auto& commonPrefix : outcome.result().CommonPrefixes()) { int64_t foldersize = calculateFolderLength(client, BucketName, commonPrefix); std::cout << "folder" << ",name:" << commonPrefix << ",size:" << foldersize << std::endl; } nextMarker = outcome.result().NextMarker(); isTruncated = outcome.result().IsTruncated(); } while (isTruncated); /* Release resources such as network resources. */ ShutdownSdk(); return 0; }
関連ドキュメント
オブジェクトの一覧表示に使用する完全なサンプルコードについては、『GitHub』をご参照ください。
オブジェクトを一覧表示するために呼び出すAPI操作の詳細については、「GetBucket (ListObjects) 」および「ListObjectsV2 (GetBucketV2) 」をご参照ください。