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

Object Storage Service:OSS からの単純なファイルダウンロード

最終更新日:Nov 28, 2025

単純ダウンロードでは、Object Storage Service (OSS) API の GetObject 操作を呼び出してオブジェクトをダウンロードします。この方法は、単一の HTTP リクエストでオブジェクトをダウンロードする場合に適しています。

前提条件

  • オブジェクトが OSS にアップロードされていること。詳細については、「オブジェクトのアップロード」をご参照ください。

  • アーカイブオブジェクトをダウンロードする場合、オブジェクトが解凍状態であるか、バケットでアーカイブオブジェクトのリアルタイムアクセスが有効になっていることを確認してください。詳細については、「オブジェクトの解凍」および「アーカイブオブジェクトのリアルタイムアクセス」をご参照ください。

  • コールドアーカイブまたはディープコールドアーカイブのオブジェクトをダウンロードするには、オブジェクトが解凍状態であることを確認してください。 詳細については、「オブジェクトの復元」をご参照ください。

方法

重要

OSS コンソールを使用

説明

OSS コンソールからディレクトリまたはそのサブディレクトリをダウンロードすることはできません。ディレクトリまたはそのサブディレクトリをダウンロードするには、ossbrowser、ossutil、SDK、または API 操作を使用します。

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、対象のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクトをダウンロードします。

    • 単一オブジェクトのダウンロード

      方法 1:対象オブジェクトの [操作] 列で、more > ダウンロード を選択します。

      説明

      この操作をデフォルトの さらに追加 セクションから [共通オブジェクト操作] セクションに移動した場合、more アイコンをクリックせずに操作を表示できます。

      方法 2:対象オブジェクトの名前をクリックするか、[操作] 列の 詳細 をクリックします。表示される 詳細 パネルで、ダウンロード をクリックします。

    • 複数オブジェクトのダウンロード

      複数のオブジェクトを選択し、リストの下部にある ダウンロード をクリックします。OSS コンソールからは一度に最大 100 個のオブジェクトをダウンロードできます。

ossbrowser GUI を使用

ossbrowser は、OSS コンソールと同様のオブジェクトレベルの操作を提供します。ossbrowser UI の指示に従ってオブジェクトをダウンロードできます。詳細については、「一般的な操作」をご参照ください。

Alibaba Cloud SDK を使用

次のコードは、一般的な SDK を使用して単純ダウンロードを実行する方法の例を示しています。他の SDK を使用してこのダウンロードを実行する方法については、「SDK の概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        // エンドポイントを設定します。ここでは、中国 (杭州) リージョンを例として使用します。エンドポイントを実際のリージョンに設定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。バケット名は含めないでください。例:testfolder/exampleobject.txt。
        String objectName = "testfolder/exampleobject.txt";
        // オブジェクトのダウンロード先の完全なパスを指定します。
        String pathName = "D:\\localpath\\examplefile.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトをローカルファイルにダウンロードし、指定したローカルパスに保存します。指定したローカルファイルが存在する場合は上書きされます。指定したローカルファイルが存在しない場合は作成されます。
            // ローカルパスを指定しない場合、ダウンロードされたオブジェクトはデフォルトでサンプルプログラムのプロジェクトに対応するローカルパスに保存されます。
            ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}   
const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourRegion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケット名を指定します。
  bucket: 'examplebucket'
});

async function get () {
  try {
    // オブジェクトとローカルファイルの完全なパスを指定します。オブジェクトの完全なパスにバケット名を含めないでください。
    // 同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。それ以外の場合、ダウンロードされたオブジェクトはローカルファイルとして保存されます。
    // ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。
    const result = await client.get('exampleobject.txt', 'D:\\localpath\\examplefile.txt');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

get(); 
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>

  <body>
    <!-- SDK ファイルをインポートします -->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
        region: "yourRegion",
        authorizationV4: true,
        // STS から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // STS から取得したセキュリティトークンを指定します。
        stsToken: "yoursecurityToken",
        // バケット名を指定します。
        bucket: "examplebucket",
      });

      // レスポンスヘッダーを設定して、URL を使用してオブジェクトを自動的にダウンロードし、オブジェクトのダウンロード後のローカルファイルの名前を設定します。
      const filename = "examplefile.txt";
      const response = {
        "content-disposition": `attachment; filename=${encodeURIComponent(
          filename
        )}`,
      };
      // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
      const url = client.signatureUrl("exampleobject.txt", { response });
      console.log(url);
    </script>
  </body>
</html>
// オブジェクトダウンロードリクエストを構築します。
// バケット名とオブジェクトの完全なパスを指定します。この例では、バケット名は examplebucket で、オブジェクトの完全なパスは exampledir/exampleobject.txt です。完全なパスにバケット名を含めないでください。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");

oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
    @Override
    public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// データの読み取りを開始します。
        long length = result.getContentLength();
        if (length > 0) {
            byte[] buffer = new byte[(int) length];
            int readCount = 0;
            while (readCount < length) {
                try{
                    readCount += result.getObjectContent().read(buffer, readCount, (int) length - readCount);
                }catch (Exception e){
                    OSSLog.logInfo(e.toString());
                }
            }
    // ダウンロードしたオブジェクトの完全なパスを指定します。例:D:\\localpath\\exampleobject.jpg。
            try {
                FileOutputStream fout = new FileOutputStream("download_filePath");
                fout.write(buffer);
                fout.close();
            } catch (Exception e) {
                OSSLog.logInfo(e.toString());
            }
        }
    }

    @Override
    public void onFailure(GetObjectRequest request, ClientException clientException,
                          ServiceException serviceException)  {

    }
});
OSSGetObjectRequest * request = [OSSGetObjectRequest new];

// バケット名を指定します。例:examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。
request.objectKey = @"exampledir/exampleobject.txt";

// オプションのフィールドを設定します。
request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
    // ダウンロード中のバイト数、ダウンロード済みのバイト数、ダウンロードしたい合計バイト数を指定します。
    NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
};
// request.range = [[OSSRange alloc] initWithStart:0 withEnd:99]; // bytes=0-99。ダウンロード範囲をバイト 0 からバイト 99 までに指定します。
// request.downloadToFileURL = [NSURL fileURLWithPath:@"<filepath>"]; // オブジェクトを直接ファイルにダウンロードする必要がある場合は、ファイルのパスを指定します。

OSSTask * getTask = [client getObject:request];

[getTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"download object success!");
        OSSGetObjectResult * getResult = task.result;
        NSLog(@"download result: %@", getResult.downloadedData);
    } else {
        NSLog(@"download object failed, error: %@" ,task.error);
    }
    return nil;
}];

// [getTask waitUntilFinished];

// [request cancel];
#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;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";

/* バケット名を指定します。例:examplebucket。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* ローカルファイルの完全なパスを指定します。 */
const char *local_filename = "yourLocalFilename";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t 型のデータを初期化します。 */
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。 */    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 2つの追加パラメーターを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを指定します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。aos_pool_t は apr_pool_t と同等です。メモリプールを作成するためのコードは APR ライブラリに含まれています。 */
    aos_pool_t *pool;
    /* メモリプールを作成します。2番目のパラメーターの値は NULL です。これは、プールが他のメモリプールを継承しないことを示します。 */
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、エンドポイント、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれます。 */
    oss_request_options_t *oss_client_options;
    /* メモリプール内のメモリリソースをオプションに割り当てます。 */
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_options を初期化します。 */
    init_options(oss_client_options);
    /* パラメーターを初期化します。 */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *params;
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_str_set(&file, local_filename);
    params = aos_table_make(pool, 0);
    /* オブジェクトをローカルファイルにダウンロードします。同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。それ以外の場合は、新しいファイルが作成されます。 */
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("Get object from file succeeded\n");
    } else {
        printf("Get object from file failed\n");
    }  
    /* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。例:examplebucket。
bucket = client.get_bucket('examplebucket')
# オブジェクトをローカルコンピューターにダウンロードします。
bucket.get_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')
package main

import (
	"context"
	"flag"
	"log"
	"net/http"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルトの構成をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// ローカルファイルのパスを指定します。
	localFile := "download.file"

	// オブジェクトが 2024年10月21日 18:43:02 に最終変更されたと仮定します。入力した UTC 時刻がこの時刻より前の場合、IfModifiedSince 条件が満たされ、ダウンロードがトリガーされます。
	date := time.Date(2024, time.October, 21, 18, 43, 2, 0, time.UTC)

	// ETag が "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" であると仮定します。入力した ETag がオブジェクトの ETag と同じ場合、IfMatch 条件が満たされ、ダウンロードがトリガーされます。
	etag := "\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\""

	// オブジェクトをローカルファイルにダウンロードするリクエストを作成します。
	getRequest := &oss.GetObjectRequest{
		Bucket:          oss.Ptr(bucketName),                   // バケット名。
		Key:             oss.Ptr(objectName),                   // オブジェクト名。
		IfModifiedSince: oss.Ptr(date.Format(http.TimeFormat)), // IfModifiedSince パラメーターを指定します。
		IfMatch:         oss.Ptr(etag),                         // IfMatch パラメーターを指定します。
	}

	// オブジェクトをローカルファイルにダウンロードし、結果を処理します。
	result, err := client.GetObjectToFile(context.TODO(), getRequest, localFile)
	if err != nil {
		log.Fatalf("failed to get object to file %v", err)
	}

	log.Printf("get object to file result:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
import os

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="get object sample")

# バケットが配置されているリージョンを指定するための --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケット名を指定するための --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定するための --endpoint コマンドライン引数を追加します。この引数は必須ではありません。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクト名を指定するための --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # ID 検証のために環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 設定でリージョンを設定します。
    cfg.region = args.region

    # エンドポイントが提供されている場合は、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 設定された情報を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # オブジェクトを取得するリクエストを実行します。バケット名とオブジェクト名を指定します。
    result = client.get_object(oss.GetObjectRequest(
        bucket=args.bucket,  # バケット名を指定します。
        key=args.key,  # オブジェクトキーを指定します。
    ))

    # オブジェクト取得の結果を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content length: {result.content_length},'
          f' content range: {result.content_range},'
          f' content type: {result.content_type},'
          f' etag: {result.etag},'
          f' last modified: {result.last_modified},'
          f' content md5: {result.content_md5},'
          f' cache control: {result.cache_control},'
          f' content disposition: {result.content_disposition},'
          f' content encoding: {result.content_encoding},'
          f' expires: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' storage class: {result.storage_class},'
          f' object type: {result.object_type},'
          f' version id: {result.version_id},'
          f' tagging count: {result.tagging_count},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' next append position: {result.next_append_position},'
          f' expiration: {result.expiration},'
          f' restore: {result.restore},'
          f' process status: {result.process_status},'
          f' delete marker: {result.delete_marker},'
    )

    # ========== 方法 1:オブジェクト全体を読み取る ==========
    with result.body as body_stream:
        data = body_stream.read()
        print(f"The file is read. Data length: {len(data)} bytes")

        path = "./get-object-sample.txt"
        with open(path, 'wb') as f:
            f.write(data)
        print(f"The file is downloaded and saved to the path: {path}")

    # # ========== 方法 2:チャンクで読み取る ==========
    # with result.body as body_stream:
    #     chunk_path = "./get-object-sample-chunks.txt"
    #     total_size = 0

    #     with open(chunk_path, 'wb') as f:
    #         # 256 KB のブロックサイズを使用します。必要に応じて block_size パラメーターを変更できます。
    #         for chunk in body_stream.iter_bytes(block_size=256 * 1024):
    #             f.write(chunk)
    #             total_size += len(chunk)
    #             print(f"Data block received: {len(chunk)} bytes | Total: {total_size} bytes")

    #     print(f"The file is downloaded and saved to the path: {chunk_path}")

# このスクリプトが直接実行されると、main 関数が呼び出されます。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると、main 関数が呼び出されます。
<?php

// 依存ライブラリが正しくロードされるように、オートローダーファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を定義します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // バケットが配置されているリージョン。(必須)
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // エンドポイント。(オプション)
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // バケット名。(必須)
    "key" => ['help' => 'The name of the object', 'required' => True], // オブジェクト名。(必須)
];

// パラメーターの説明を getopt で必要なロングオプション形式に変換します。
// 各パラメーターの後のコロン「:」は、パラメーターが値を必要とすることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが存在するかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターがない場合は、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を抽出します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。
$key = $options["key"];       // オブジェクト名。

// 環境変数から認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から Access Key ID と Access Key Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合は、エンドポイントを設定します。
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 指定されたオブジェクトのコンテンツを取得するための GetObjectRequest オブジェクトを作成します。
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);

// get object 操作を実行します。
$result = $client->getObject($request);

// 保存するローカルファイルのパスを定義します。
$localFilePath = 'path/to/local/file.txt'; // 実際のファイルパスに置き換えてください。

// コンテンツをローカルファイルに書き込みます。
file_put_contents( $localFilePath, $result->body->getContents());

// 結果を出力します。
// HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、200 はリクエストが成功したことを示します。
    'request id:' . $result->requestId . PHP_EOL  // リクエスト ID。デバッグやリクエストの追跡に使用されます。
);

ossutil コマンドラインインターフェイスを使用

ossutil コマンドラインインターフェイス (CLI) を使用してファイルをダウンロードできます。ossutil のインストール方法の詳細については、「ossutil のインストール」をご参照ください。

次のコマンドは、examplebucket バケットから exampleobject ファイルをダウンロードします。

ossutil api get-object --bucket examplebucket --key exampleobject

このコマンドの詳細については、「get-object」をご参照ください。

関連 API

上記の方法は API 操作に基づいて構築されています。高度なカスタマイズを行うには、RESTful API を直接呼び出すことができます。API を直接呼び出すには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「GetObject」をご参照ください。

権限

デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

定義

GetObject

oss:GetObject

オブジェクトをダウンロードします。

oss:GetObjectVersion

オブジェクトをダウンロードする際に、versionId を通じてオブジェクトのバージョンを指定する場合、この権限が必要です。

kms:Decrypt

オブジェクトをダウンロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。

課金

単純ダウンロードには、以下の課金項目が適用されます。課金項目の単価の詳細については、「Object Storage Service の料金」をご参照ください。

API

課金項目

説明

GetObject

GET リクエスト

成功したリクエストの数に基づいてリクエスト料金が課金されます。

インターネット経由のアウトバウンドトラフィック

パブリックエンドポイント (oss-cn-hangzhou.aliyuncs.com など) またはアクセラレーションエンドポイント (oss-accelerate.aliyuncs.com など) を使用して GetObject 操作を呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィック料金が課金されます。

低頻度アクセス (IA) オブジェクトの取得

低頻度アクセス (IA) オブジェクトが取得された場合、取得された IA データのサイズに基づいて IA データ取得料金が課金されます。

リアルタイムアクセスが有効なバケット内のアーカイブオブジェクトの取得

リアルタイムアクセスが有効なバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が課金されます。

転送アクセラレーション料金

転送アクセラレーションを有効にし、アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が課金されます。

関連ドキュメント

  • バージョン管理が有効なバケットからオブジェクトをダウンロードする方法の詳細については、「バージョン管理が有効なバケット内のオブジェクトの管理」をご参照ください。

  • バージョン管理が一時停止されたバケットからオブジェクトをダウンロードする方法の詳細については、「バージョン管理が一時停止されたバケット内のオブジェクトの管理」をご参照ください。

  • OSS は、不正なユーザーがバケットからデータをダウンロードするのを防ぐために、バケットレベルおよびオブジェクトレベルのアクセス制御を提供します。詳細については、「権限とアクセス制御の概要」をご参照ください。

  • ラージオブジェクトの中断されたダウンロードを再開したい場合は、再開可能なダウンロードを使用できます。詳細については、「再開可能なダウンロード」をご参照ください。

  • サードパーティにプライベートバケットからのオブジェクトのダウンロードを許可したい場合は、Security Token Service (STS) からの一時的なアクセス認証情報または署名付き URL を使用できます。詳細については、「サードパーティへのオブジェクトのダウンロード許可」をご参照ください。

  • 特定の条件が満たされた場合にのみオブジェクトをダウンロードしたい場合は、ダウンロードの条件を指定できます。条件が満たされない場合、エラーが返されます。詳細については、「条件付きダウンロード」をご参照ください。