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

Object Storage Service:シンプルなダウンロード

最終更新日:Aug 16, 2025

このトピックでは、シンプルなダウンロードメソッドを使用して、バケットからローカルファイルにオブジェクトをダウンロードする方法について説明します。 このメソッドは簡単で、OSS からローカルコンピュータにオブジェクトをすばやくダウンロードするのに適しています。

注意事項

  • このトピックのサンプルコードでは、例として中国 (杭州) リージョン (リージョン ID: cn-hangzhou) を使用しています。 デフォルトでは、インターネットエンドポイントが使用されます。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS がサポートするリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • オブジェクトをローカルファイルにダウンロードするには、oss:GetObject 権限が必要です。 詳細については、「RAM ユーザーにカスタムアクセス権限ポリシーを付与する」をご参照ください。

  • このトピックでは、環境変数からアクセス認証情報を取得する方法の例を示します。 アクセス認証情報を構成する方法の詳細については、「PHP のアクセス認証情報を構成する」をご参照ください。

サンプルコード

次のコードを使用して、バケットからローカルファイルにオブジェクトをダウンロードできます。

<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン。(必須)
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント。(オプション)
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // バケット名。(必須)
    "key" => ['help' => 'オブジェクトの名前', '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 を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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);

// オブジェクトの取得操作を実行します。
$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。デバッグまたはリクエストの追跡に使用されます。
);

シナリオ

条件付きダウンロード

バケットからオブジェクトをダウンロードするときに、オブジェクトの最終更新時刻または ETag に基づいて条件を指定できます。 ETag は、ファイルコンテンツの識別子です。 ダウンロード操作は、これらの条件が満たされた場合にのみ実行されます。 条件が満たされない場合、エラーが返され、ダウンロードはトリガーされません。 条件付きダウンロードにより、不要なネットワークトラフィックとリソース消費を削減し、ダウンロード効率を向上させることができます。

次の表に、OSS がサポートする条件を示します。

説明
  • 同じリクエストで If-Modified-Since と If-Unmodified-Since を指定できます。 また、同じリクエストで If-Match と If-None-Match を指定することもできます。

  • ossClient.getObjectMeta メソッドを呼び出して、ETag を取得できます。

パラメーター

説明

IfModifiedSince

指定された時刻がオブジェクトの実際の更新時刻より前の場合、オブジェクトがダウンロードされます。 それ以外の場合、304 Not Modified エラーが返されます。

IfUnmodifiedSince

指定された時刻がオブジェクトの実際の更新時刻と同じかそれ以降の場合、オブジェクトがダウンロードされます。 それ以外の場合、412 Precondition Failed エラーが返されます。

IfMatch

指定された ETag が OSS オブジェクトの ETag と一致する場合、オブジェクトがダウンロードされます。 それ以外の場合、412 Precondition Failed エラーが返されます。

IfNoneMatch

指定された ETag が OSS オブジェクトの ETag と一致しない場合、オブジェクトがダウンロードされます。 それ以外の場合、304 Not Modified エラーが返されます。

次のサンプルコードは、条件付きダウンロードを実行する方法を示しています。

<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン。(必須)
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント。(オプション)
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // バケット名。(必須)
    "key" => ['help' => 'オブジェクトの名前', '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 を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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);

// オブジェクトの最終更新時刻が 2024 年 10 月 21 日 18:43:02 であると仮定します。指定された UTC 時刻がこの時刻より前の場合、IfModifiedSince 条件が満たされ、ダウンロードがトリガーされます。
$ifModifiedSince = "Sun, 21 Oct 2024 18:43:02 GMT";

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

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

// オブジェクトの取得操作を実行します。
$result = $client->getObject($request);

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

ストリーミングダウンロード

次のコードは、GetObject 操作を呼び出すときに stream パラメータを設定してストリーミングダウンロードを有効にする方法を示しています。

<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン。(必須)
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント。(オプション)
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // バケット名。(必須)
    "key" => ['help' => 'オブジェクトの名前', '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";
        exit(1); // 必須パラメータがない場合は、プログラムを終了します。
    }
}

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

// EnvironmentVariableCredentialsProvider を使用して、環境変数からアクセス認証情報をロードします。
// ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が正しく設定されていることを確認してください。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト構成をロードします。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。

// コマンドラインで endpoint パラメータが指定されている場合は、指定されたエンドポイントを使用します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

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

// GetObjectRequest オブジェクトを作成し、バケットとオブジェクトキーを指定します。
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);

// getObject メソッドを呼び出してオブジェクトをダウンロードします。 stream オプションを true に設定して、大きなファイルをストリームで処理します。
$result = $client->getObject(request: $request, args: ['request_options' => ['stream' => true]]);

// ストリームオブジェクトを取得します。
$stream = $result->body;

// ストリームコンテンツを読み取ります (チャンク単位で)。
while (!$stream->eof()) { // ストリームが終了したかどうかを確認します。
    echo $stream->read(1024); // 一度に 1 KB のデータを読み取り、データを出力します。
}

ダウンロードの進捗状況を表示する

次のコードは、GetObject 操作を呼び出すときにダウンロードの進捗状況を表示する方法を示しています。

<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメータの説明を定義します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン。(必須)
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント。(オプション)
    "bucket" => ['help' => 'バケットの名前', 'required' => True], // バケット名。(必須)
    "key" => ['help' => 'オブジェクトの名前', '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 を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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,
);

# ダウンロードの進捗状況情報を表示するために、進捗状況コールバック関数を設定します。
$request->progressFn = static function (int $increment, int $transferred, int $total) {
    echo sprintf("ダウンロード済み: %d" . PHP_EOL, $transferred);
    echo sprintf("現在のダウンロード: %d" . PHP_EOL, $increment);
    echo sprintf("合計データ: %d" . PHP_EOL, $total);
    echo '-------------------------------------------' . PHP_EOL;
};

// オブジェクトの取得操作を実行します。
$result = $client->getObject($request);

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

関連情報

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