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

Object Storage Service:オブジェクトをローカルコンピュータにダウンロードする

最終更新日:Apr 12, 2025

このトピックでは、Object Storage Service (OSS) オブジェクトをバケットからローカルコンピュータにダウンロードする方法について説明します。

使用上の注意

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

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient を作成する場合は、「OSSClient インスタンスを作成する」をご参照ください。

権限

デフォルトでは、Alibaba Cloud アカウントは、アカウント内のリソースに対するフル権限を持っています。 一方、RAM ユーザーと Alibaba Cloud アカウントに関連付けられている RAM ロールは、最初は権限を持っていません。 RAM ユーザーまたはロールを使用してリソースを管理するには、RAM ポリシーまたはバケットポリシーを使用して必要な権限を付与する必要があります。

API

アクション

説明

GetObject

oss:GetObject

オブジェクトをダウンロードする権限を付与します。

oss:GetObjectVersion

オブジェクトバージョンを照会する権限を付与します。 この権限は、オブジェクトの特定のバージョンをダウンロードする場合に必要です。

kms:Decrypt

Key Management Service (KMS) 復号を使用する権限を付与します。 この権限は、 x-oss-server-side-encryption ヘッダーを指定して暗号化したオブジェクトを部分的にダウンロードする場合に必要です。

サンプルコード

次のコードは、オブジェクトをローカルファイルとしてダウンロードする方法の例を示しています。

#include <alibabacloud/oss/OssClient.h>
#include <memory>
#include <fstream>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSSへのアクセスに使用するアカウントの情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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;
}

関連情報

  • オブジェクトをローカルファイルとしてダウンロードするために使用される完全なサンプルコードについては、GitHub をご覧ください。

  • オブジェクトをローカルファイルとしてダウンロードするために呼び出すことができる API 操作の詳細については、「GetObject」をご参照ください。