このトピックでは、Python SDK V2 の Downloader モジュールを使用してファイルをダウンロードする方法について説明します。
使用上の注意
このトピックのサンプルコードでは、リージョン ID が
cn-hangzhouの中国 (杭州) リージョンを例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS がサポートするリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。ファイルをダウンロードするには、
oss:GetObject権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
メソッド定義
Downloader の特徴
Python SDK V2 の Downloader モジュールは、基盤となる実装の詳細を抽象化して便利なファイルダウンロード機能を提供する、汎用的なダウンロードメソッドを提供します。
Downloader モジュールは、範囲のダウンロードを使用してファイルを自動的に小さなパートに分割し、パートを並行してダウンロードすることで、ダウンロードパフォーマンスを向上させます。
Downloader モジュールは、再開可能なダウンロード機能も提供します。ダウンロードプロセス中に、完了したパートのステータスが記録されます。ネットワーク障害や予期しないプログラムの終了などの問題によってダウンロードが中断された場合、最後のブレークポイントからダウンロードを再開できます。
次のコードは、Downloader モジュールの一般的なメソッドを示しています。
class Downloader:
...
def downloader(self, **kwargs) -> Downloader:
...
def download_file(self, request: models.GetObjectRequest, filepath: str, **kwargs: Any) -> DownloadResult:
...
def download_to(self, request: models.GetObjectRequest, writer: IO[bytes], **kwargs: Any) -> DownloadResult:
...リクエストパラメーター
パラメーター | タイプ | 説明 |
request | GetObjectRequest | オブジェクトをダウンロードするためのリクエストパラメーター。パラメーターは GetObject メソッドのものと同じです。詳細については、「GetObjectRequest」をご参照ください。 |
filepath | str | ローカルファイルのパス。 |
writer | IO[bytes] | ダウンロードストリーム。 |
**kwargs | Any | (オプション) 任意のパラメーター。タイプ: 辞書 |
レスポンスパラメーター
タイプ | 説明 |
DownloadResult | オブジェクトをダウンロードするためのレスポンスパラメーター。詳細については、「DownloadResult」をご参照ください。 |
client.downloader を使用してダウンローダーインスタンスを初期化するときに、構成オプションを指定してダウンロードの動作をカスタマイズできます。また、各ダウンロード呼び出しに構成オプションを指定して、各オブジェクトの動作をカスタマイズすることもできます。たとえば、次のようにパートサイズを指定できます。
ダウンローダーの構成パラメーターを設定します。
downloader = client.downloader(part_size=1024 * 1024)各ダウンロードリクエストの構成パラメーターを設定します。
result = downloader.download_file(oss.GetObjectRequest( bucket="example_bucket", key="example_key", ), filepath="/local/dir/example", part_size=10 * 1024 * 1024, )
次の表に、一般的な構成オプションを示します。
パラメーター | タイプ | 説明 |
part_size | int | パートサイズを指定します。デフォルト値は 6 MiB です。 |
parallel_num | int | 同時ダウンロードタスクの数を指定します。デフォルト値は 3 です。このパラメーターは、グローバルな同時実行数制限ではなく、単一の呼び出しの同時実行数制限を指定します。 |
enable_checkpoint | bool | 再開可能なダウンロード機能を有効にするかどうかを指定します。デフォルトでは、この機能は無効になっています。 |
checkpoint_dir | str | レコードファイルを保存するパスを指定します。例: /local/dir/。このパラメーターは、enable_checkpoint が True に設定されている場合にのみ有効です。 |
verify_data | bool | ダウンロードが再開されたときに、ダウンロードされたデータの CRC-64 値を検証するかどうかを指定します。デフォルトでは、値は検証されません。このパラメーターは、enable_checkpoint が True に設定されている場合にのみ有効です。 |
use_temp_file | bool | ファイルをダウンロードするときに一時ファイルを使用するかどうかを指定します。デフォルトでは、一時ファイルが使用されます。ファイルは最初に一時ファイルにダウンロードされます。ダウンロードが成功すると、一時ファイルはオブジェクトファイルに名前が変更されます。 |
ファイルダウンロードマネージャーのメソッド定義の詳細については、「Downloader」をご参照ください。
サンプルコード
次のコードを使用して、バケットからローカルデバイスにファイルをダウンロードできます。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: ファイルダウンロードのサンプル。
parser = argparse.ArgumentParser(description="download file 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')
# OSS 内のオブジェクト (ファイル) のキーを示すコマンドライン引数 --key を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)
# ダウンロードしたファイルを保存するローカルパスを示すコマンドライン引数 --file_path を追加します。この引数は必須です。例: "/Users/yourLocalPath/yourFileName"。
parser.add_argument('--file_path', help='The path to save the downloaded file.', required=True)
def main():
# コマンドライン引数を解析して、ユーザーが入力した値を取得します。
args = parser.parse_args()
# ID 検証のために、環境変数から OSS へのアクセスに必要な認証情報を読み込みます。
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 クライアントを初期化し、OSS と対話します。
client = oss.Client(cfg)
# ファイルをダウンロードするためのオブジェクトを作成します。
downloader = client.downloader()
# メソッドを呼び出して、ファイルダウンロード操作を実行します。
result = downloader.download_file(
oss.GetObjectRequest(
bucket=args.bucket, # 宛先バケットを指定します。
key=args.key, # OSS 内のファイルの名前を指定します。
),
filepath=args.file_path # ダウンロードしたファイルを保存するローカルパスを指定します。
)
# 書き込まれたバイト数など、ダウンロード結果に関する情報を出力します。
print(f'written: {result.written}')
# このスクリプトが直接実行されると、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
main() # スクリプトのエントリポイント。ここからプログラムフローが開始されます。一般的なシナリオ
参照
ダウンロードマネージャーの詳細については、「開発者ガイド」をご参照ください。
ダウンロードマネージャーの完全なサンプルコードについては、「download_file.py」をご参照ください。