すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:オブジェクトタグの設定 (C++ SDK)

最終更新日:Nov 30, 2025

Object Storage Service (OSS) は、バケット内のオブジェクトを分類するためのオブジェクトのタグ付けをサポートしています。同じタグを持つオブジェクトに対して、ライフサイクルルールやアクセス権限を設定できます。

説明

オブジェクトのタグ付けの詳細については、「オブジェクトのタグ付け」をご参照ください。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient を作成する場合は、「OssClient インスタンスの作成」をご参照ください。

  • オブジェクトタグを設定するには、oss:PutObjectTagging 権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

アップロード時のオブジェクトタグの追加

シンプルアップロード時のオブジェクトタグの追加

#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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    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;
}

マルチパートアップロード時のオブジェクトタグの追加

#include <alibabacloud/oss/OssClient.h>
#include <fstream>
int64_t getFileSize(const std::string& file)
{
    std::fstream f(file, std::ios::in | std::ios::binary);
    f.seekg(0, f.end);
    int64_t size = f.tellg();
    f.close();
    return size;
}

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";
    /* ローカルファイルのフルパスを指定します。*/
    std::string fileToUpload = "yourFilePath";

    /* ネットワークリソースを初期化します。*/
    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);
    InitiateMultipartUploadRequest initUploadRequest(BucketName, ObjectName);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    initUploadRequest.setTagging(tagging.toQueryParameters());

    /* マルチパートアップロードイベントを初期化します。*/
    auto uploadIdResult = client.InitiateMultipartUpload(initUploadRequest);
    auto uploadId = uploadIdResult.result().UploadId();
    int64_t partSize = 100 * 1024;
    PartList partETagList;
    auto fileSize = getFileSize(fileToUpload);
    int partCount = static_cast<int>(fileSize / partSize);
    /* パート数を計算します。*/
    if (fileSize % partSize != 0) {
        partCount++;
    }

    /* 各パートをアップロードします。*/
    for (int i = 1; i <= partCount; i++) {
        auto skipBytes = partSize * (i - 1);
        auto size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
        std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>(fileToUpload, std::ios::in|std::ios::binary);
        content->seekg(skipBytes, std::ios::beg);

        UploadPartRequest uploadPartRequest(BucketName, ObjectName, content);
        uploadPartRequest.setContentLength(size);
        uploadPartRequest.setUploadId(uploadId);
        uploadPartRequest.setPartNumber(i);
        auto uploadPartOutcome = client.UploadPart(uploadPartRequest);
        if (uploadPartOutcome.isSuccess()) {
            Part part(i, uploadPartOutcome.result().ETag());
            partETagList.push_back(part);
        }
        else {
            std::cout << "uploadPart fail" <<
            ",code:" << uploadPartOutcome.error().Code() <<
            ",message:" << uploadPartOutcome.error().Message() <<
            ",requestId:" << uploadPartOutcome.error().RequestId() << std::endl;
        }

    }

    /* マルチパートアップロードを完了します。*/
    CompleteMultipartUploadRequest request(BucketName, ObjectName);
    request.setUploadId(uploadId);
    request.setPartList(partETagList);
    auto outcome = client.CompleteMultipartUpload(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "CompleteMultipartUpload fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);

    auto meta = ObjectMetaData();
    meta.setContentType("text/plain");

    /* ファイルを追加します。デフォルトの追加位置は 0 です。*/
    std::shared_ptr<std::iostream> content1 = std::make_shared<std::stringstream>();
    *content1 <<"Thank you for using Aliyun Object Storage Service!";
    AppendObjectRequest request(BucketName, ObjectName, content1, meta);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    /* ファイルを追加します。*/
    auto result = client.AppendObject(request);

    if (!result.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "AppendObject fail" <<
        ",code:" << result.error().Code() <<
        ",message:" << result.error().Message() <<
        ",requestId:" << result.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。フルパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt */
    std::string ObjectName = "exampledir/exampleobject.txt";
    std::string UploadFilePath = "yourUploadfilePath";

    /* ネットワークリソースを初期化します。*/
    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);

    /* 再開可能アップロードを実行します。*/
    UploadObjectRequest request(BucketName, ObjectName, UploadFilePath);

    /* オブジェクトタグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    auto outcome = client.ResumableUploadObject(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "ResumableUploadObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    auto putTaggingOutcome = client.SetObjectTagging(SetObjectTaggingRequest(BucketName, ObjectName, tagging));

    if (!putTaggingOutcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "SetObjectTagging fail" <<
        ",code:" << putTaggingOutcome.error().Code() <<
        ",message:" << putTaggingOutcome.error().Message() <<
        ",requestId:" << putTaggingOutcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

オブジェクトコピー時のオブジェクトタグの設定

オブジェクトをコピーするときに、宛先オブジェクトのタグをどのように設定するかを指定できます。有効な値は次のとおりです:

  • Copy (デフォルト):ソースオブジェクトから宛先オブジェクトにタグをコピーします。

  • Replace:ソースオブジェクトのタグを無視し、リクエストで指定されたタグを宛先オブジェクトに適用します。

次の例は、オブジェクトをコピーするときにオブジェクトタグを設定する方法を示しています。1 GB 未満のオブジェクトにはシンプルコピーが使用され、1 GB を超えるオブジェクトにはマルチパートコピーが使用されます。

シンプルコピー時のオブジェクトタグの設定

次のコードは、1 GB 未満のオブジェクトのシンプルコピーを実行するときにオブジェクトタグを設定する方法を示しています:

#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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket */
    std::string BucketName = "examplebucket";
    /* 宛先オブジェクトのフルパスを指定します。フルパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* ソースオブジェクトのフルパスを指定します。*/
    std::string CopyObjectName = "scrdir/scrobject.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);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    /* ファイルをコピーするときにタグを設定します。*/
    CopyObjectRequest cpRequest(BucketName, CopyObjectName);
    cpRequest.setCopySource(BucketName, ObjectName);
    Tagging tagging2;
    tagging2.addTag(Tag("key1-2", "value1-2"));
    tagging2.addTag(Tag("key2-2", "value2-2"));
    tagging2.addTag(Tag("key3-2", "value3-2"));
    cpRequest.setTagging(tagging2.toQueryParameters());

    /* ソースオブジェクトのタグを無視し、リクエストで指定されたタグに置き換えます。*/
    cpRequest.setTaggingDirective(CopyActionList::Replace);

    /* ファイルをコピーします。*/
    auto copyoutcome = client.CopyObject(cpRequest);
    if (!copyoutcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "CopyObject fail" <<
        ",code:" << copyoutcome.error().Code() <<
        ",message:" << copyoutcome.error().Message() <<
        ",requestId:" << copyoutcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

マルチパートコピー時のオブジェクトタグの設定

次のコードは、1 GB を超えるオブジェクトのマルチパートコピーを実行するときにオブジェクトタグを設定する方法を示しています:

#include <alibabacloud/oss/OssClient.h>
#include <sstream>
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";
    /* ソースバケット名を指定します。例:srcexamplebucket */
    std::string SourceBucketName = "srcexamplebucket";
    /* 宛先バケット名を指定します。宛先バケットはソースバケットと同じリージョンにある必要があります。例:destbucket */
    std::string CopyBucketName = "destbucket";
    /* ソースオブジェクトのフルパスを指定します。フルパスにバケット名を含めることはできません。例:srcdir/scrobject.txt */
    std::string SourceObjectName = "srcdir/scrobject.txt";
    /* 宛先オブジェクトのフルパスを指定します。フルパスにバケット名を含めることはできません。例:destdir/destobject.txt */
    std::string CopyObjectName = "destdir/destobject.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);

    auto getObjectMetaReq = GetObjectMetaRequest(SourceBucketName, SourceObjectName);
    auto getObjectMetaResult = client.GetObjectMeta(getObjectMetaReq);
    if (!getObjectMetaResult.isSuccess()) {
        std::cout << "GetObjectMeta fail" <<
        ",code:" << getObjectMetaResult.error().Code() <<
        ",message:" << getObjectMetaResult.error().Message() <<
        ",requestId:" << getObjectMetaResult.error().RequestId() << std::endl;
        return -1;
    }
    /* コピーするファイルのサイズを取得します。*/
    auto objectSize = getObjectMetaResult.result().ContentLength();

    /* 大きいファイルをコピーします。*/
    InitiateMultipartUploadRequest initUploadRequest(CopyBucketName, CopyObjectName);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    initUploadRequest.setTagging(tagging.toQueryParameters());

    /* マルチパートコピーイベントを初期化します。*/
    auto uploadIdResult = client.InitiateMultipartUpload(initUploadRequest);
    auto uploadId = uploadIdResult.result().UploadId();
    int64_t partSize = 100 * 1024;
    PartList partETagList;
    int partCount = static_cast<int>(objectSize / partSize);
    /* パート数を計算します。*/
    if (objectSize % partSize != 0) {
        partCount++;
    }

    /* 各パートをコピーします。*/
    for (int i = 1; i <= partCount; i++) {
        auto skipBytes = partSize * (i - 1);
        auto size = (partSize < objectSize - skipBytes) ? partSize : (objectSize - skipBytes);
        auto uploadPartCopyReq = UploadPartCopyRequest(CopyBucketName, CopyObjectName, SourceBucketName, SourceObjectName,uploadId, i);
        uploadPartCopyReq.setCopySourceRange(skipBytes, skipBytes + size -1);
        auto uploadPartOutcome = client.UploadPartCopy(uploadPartCopyReq);
        if (uploadPartOutcome.isSuccess()) {
            Part part(i, uploadPartOutcome.result().ETag());
            partETagList.push_back(part);
        }
        else {
            std::cout << "UploadPartCopy fail" <<
            ",code:" << uploadPartOutcome.error().Code() <<
            ",message:" << uploadPartOutcome.error().Message() <<
            ",requestId:" << uploadPartOutcome.error().RequestId() << std::endl;
        }

    }

    /* マルチパートコピーを完了します。*/
    CompleteMultipartUploadRequest request(CopyBucketName, CopyObjectName, partETagList, uploadId);
    auto outcome = client.CompleteMultipartUpload(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "CompleteMultipartUpload fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    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 を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。フルパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* シンボリックリンクの名前を指定します。例:symlink.txt */
    std::string LinkName = "symlink.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);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    /* シンボリックリンクを作成します。*/
    CreateSymlinkRequest csRequest(BucketName, ObjectName);
    csRequest.SetSymlinkTarget(LinkName);

    /* タグを設定します。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    csRequest.setTagging(tagging.toQueryParameters());

    auto csoutcome = client.CreateSymlink(csRequest);

    if (!csoutcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "CreateSymlink fail" <<
        ",code:" << csoutcome.error().Code() <<
        ",message:" << csoutcome.error().Message() <<
        ",requestId:" << csoutcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

関連ドキュメント

  • オブジェクトタグ設定の完全なサンプルコードについては、GitHub の例をご参照ください。

  • オブジェクトタグを設定するための API 操作の詳細については、「PutObjectTagging」をご参照ください。