このトピックでは、OSS C++ SDK を使用して、バケットの作成、オブジェクトのアップロード、オブジェクトのダウンロードなどの一般的な操作を実行する方法について説明します。
サンプルコードの conf は、OssClient の設定クラスである ClientConfiguration のインスタンスです。このクラスを使用して、プロキシ、接続タイムアウト、最大接続数などのパラメーターを設定できます。詳細については、「初期化 (C++ SDK) 」をご参照ください。
バケットの作成
バケットは、オブジェクトを格納するコンテナーであり、OSS のグローバル名前空間です。
バケットの命名規則の詳細については、「Basic Concepts 」をご参照ください。エンドポイントの取得方法の詳細については、「リージョンとエンドポイント」をご参照ください。
次のコードは、examplebucket という名前のバケットを作成する方法を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが存在するリージョンのエンドポイントに設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが存在するリージョンの ID に設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* 新しいバケットの名前、ストレージクラス、およびアクセス制御リスト (ACL) を指定します。*/
CreateBucketRequest request(BucketName, StorageClass::IA, CannedAccessControlList::PublicReadWrite);
/* バケットを作成します。*/
auto outcome = client.CreateBucket(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
std::cout << "CreateBucket fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}
オブジェクトのアップロード
次のコードは、OSS にオブジェクトをアップロードする方法を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが存在するリージョンのエンドポイントに設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが存在するリージョンの ID に設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/* オブジェクトのフルパス (例: exampledir/exampleobject.txt) を指定します。フルパスにはバケット名を含めないでください。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトをアップロードします。*/
/* ローカルファイルのフルパスを指定します (例: D:\\localpath\\examplefile.txt)。このパスでは、localpath は examplefile.txt ファイルが格納されているローカルディレクトリです。*/
auto outcome = client.PutObject(BucketName, ObjectName,"D:\\localpath\\examplefile.txt");
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
std::cout << "PutObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}
オブジェクトのダウンロード
次のコードは、OSS からオブジェクトをローカルファイルとしてダウンロードする方法を示しています。
#include <alibabacloud/oss/OssClient.h>
#include <memory>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。 */
/* バケットが所在するリージョンのエンドポイントに yourEndpoint を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが所在するリージョンに yourRegion を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケット名を設定します。 例:examplebucket */
std::string BucketName = "examplebucket";
/* オブジェクトの完全なパスを設定します。 完全なパスにバケット名を含めることはできません。 例:exampledir/exampleobject.txt */
std::string ObjectName = "exampledir/exampleobject.txt";
/* オブジェクトを examplefile.txt という名前のローカルファイルにダウンロードし、指定されたローカルパス (D:\\localpath) に保存します。 ローカルファイルが存在する場合、上書きされます。 ローカルファイルが存在しない場合は、作成されます。 */
/* ローカルパスを指定しない場合、ダウンロードされたファイルは、デフォルトでサンプルプログラムが属するプロジェクトのローカルパスに保存されます。 */
std::string FileNametoSave = "D:\\localpath\\examplefile.txt";
/* ネットワークリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトをローカルファイルにダウンロードします。 */
GetObjectRequest request(BucketName, ObjectName);
request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(FileNametoSave, std::ios_base::out | std::ios_base::in | std::ios_base::trunc| std::ios_base::binary); });
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "GetObjectToFile success" << outcome.result().Metadata().ContentLength() << std::endl;
}
else {
/* 例外を処理します。 */
std::cout << "GetObjectToFile fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。 */
ShutdownSdk();
return 0;
}
ファイルの一覧
次のコードは、バケット内のオブジェクトを一覧表示する方法を示しています。デフォルトでは、最大 100 件のオブジェクトが一覧表示されます。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが存在するリージョンのエンドポイントに設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが存在するリージョンの ID に設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトを一覧表示します。*/
ListObjectsRequest request(BucketName);
auto outcome = client.ListObjects(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
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() <<
",last modified time:" << object.LastModified() << std::endl;
}
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}
ファイルの削除
次のコードは、指定されたオブジェクトを削除する方法を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが存在するリージョンのエンドポイントに設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが存在するリージョンの ID に設定します。たとえば、バケットが China (Hangzhou) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケット名を指定します (例: examplebucket)。*/
std::string BucketName = "examplebucket";
/* オブジェクトのフルパス (例: exampledir/exampleobject.txt) を指定します。フルパスにはバケット名を含めないでください。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* ネットワークリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectRequest request(BucketName, ObjectName);
/* オブジェクトを削除します。*/
auto outcome = client.DeleteObject(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。*/
std::cout << "DeleteObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースを解放します。*/
ShutdownSdk();
return 0;
}
関連ドキュメント
-
完全なサンプルコードについては、GitHub サンプルをご参照ください。
-
PutBucket API の詳細については、「PutBucket」をご参照ください。
-
PutObject API の詳細については、「PutObject」をご参照ください。
-
GetObject API の詳細については、「GetObject」をご参照ください。
-
GetBucket (ListObjects) API の詳細については、「GetBucket (ListObjects)」をご参照ください。
-
DeleteObject API の詳細については、「DeleteObject」をご参照ください。