このトピックでは、OSS C++ SDK (software development kit) を使用して、バケットの作成、ファイルのアップロード、オブジェクトのダウンロードなどの一般的な操作を実行する方法について説明します。
サンプルコードの conf は、OssClient の設定クラスである ClientConfiguration のインスタンスです。このクラスを使用して、プロキシ、接続タイムアウト、最大接続数などのパラメーターを設定できます。詳細については、「初期化 (C++ SDK)」をご参照ください。
バケットの作成
バケットは、ファイルを格納するためのコンテナーとして機能する OSS のグローバルな名前空間です。
バケットの命名規則の詳細については、「基本概念」をご参照ください。エンドポイントの取得方法の詳細については、「リージョンとエンドポイント」をご参照ください。
次のコードは、examplebucket という名前のバケットを作成する方法を示しています。
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS アカウント情報を初期化します。*/
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンの ID に設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンの ID に設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンの ID に設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion を、バケットが配置されているリージョンの ID に設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 サンプル」をご参照ください。
バケットを作成するための API 操作の詳細については、「PutBucket」をご参照ください。
ファイルをアップロードするための API 操作の詳細については、「PutObject」をご参照ください。
ファイルをダウンロードするための API 操作の詳細については、「GetObject」をご参照ください。
ファイルをリスト表示するための API 操作の詳細については、「GetBucket (ListObjects)」をご参照ください。
ファイルを削除するための API 操作の詳細については、「DeleteObject」をご参照ください。