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

Object Storage Service:Python 1.0 向け OSS SDK を使用したストリーミングダウンロード

最終更新日:Aug 16, 2025

ストリーミングダウンロードを使用すると、オブジェクトをストリームとして段階的にダウンロードできます。 ラージオブジェクトをダウンロードする場合、またはダウンロードの完了に長時間を要する場合、ストリーミングダウンロードを実行してオブジェクトを段階的にダウンロードできます。

使用上の注意

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

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

  • ストリーミングダウンロードを使用するには、oss:GetObject 権限が必要です。 詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

サンプルコード

次のサンプルコードは、ストリーミングダウンロードを実行して examplebucket という名前のバケットから exampleobject.txt という名前のオブジェクトをダウンロードする方法の例を示しています。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# サーバーオブジェクトを作成します。
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、署名アルゴリズム V4 を使用する場合は必須です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# bucket.get_object から返される値は、反復可能なファイルのようなオブジェクトです。
# オブジェクトの完全なパスを指定します。 オブジェクトの完全なパスにはバケット名を含めないでください。
object_stream = bucket.get_object('exampleobject.txt')
print(object_stream.read())

# オブジェクトの CRC-64 値を計算する前に、get_object から返されたストリームからオブジェクトを読み取るために read() 操作を呼び出す必要があります。
if object_stream.client_crc != object_stream.server_crc:
    print("クライアントとサーバー間の CRC チェックサムが一致しません!")

次のサンプルコードは、exampleobject.txt という名前のオブジェクトのデータをストリームから D:\localpath ディレクトリにある examplefile.txt という名前のファイルとしてダウンロードする方法の例を示しています。

import shutil
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# サーバーオブジェクトを作成します。
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、署名アルゴリズム V4 を使用する場合は必須です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# object_stream はファイルのようなオブジェクトです。 shutil.copyfileobj メソッドを使用して、ストリームからローカルファイルにデータをダウンロードできます。
# オブジェクトの完全なパスを指定します。 オブジェクトの完全なパスにはバケット名を含めないでください。
object_stream = bucket.get_object('exampleobject.txt')
# 指定されたパスにダウンロードしたオブジェクトをローカルファイルとしてダウンロードします。 指定されたパスに同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトによってファイルが上書きされます。 それ以外の場合、ダウンロードされたファイルはパスに保存されます。
# ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプル プログラムが属する プロジェクト のパスに保存されます。
with open('D:\\localpath\\examplefile.txt', 'wb') as local_fileobj:
    shutil.copyfileobj(object_stream, local_fileobj)

次のサンプルコードは、exampleobject.txt という名前のオブジェクトのデータをストリームから exampleobjectnew.txt という名前のオブジェクトにコピーする方法の例を示しています。

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# サーバーオブジェクトを作成します。
# 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントにマッピングされるリージョンの ID を指定します。 例: cn-hangzhou。 このパラメーターは、署名アルゴリズム V4 を使用する場合は必須です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# object_stream は反復可能なオブジェクトです。 オブジェクトのデータをストリームから同じバケット内の別のオブジェクトにコピーできます。
# オブジェクトの完全なパスを指定します。 オブジェクトの完全なパスにはバケット名を含めないでください。
object_stream = bucket.get_object('exampleobject.txt')
# コピー先のオブジェクトの完全なパスを指定します。 オブジェクトの完全なパスにはバケット名を含めないでください。
bucket.put_object('exampleobjectnew.txt', object_stream)

関連情報

  • ストリーミングダウンロードを実行するために使用される完全なサンプルコードについては、GitHub をご覧ください。

  • ストリーミングダウンロードを実行するために呼び出すことができる API 操作の詳細については、「GetObject」をご参照ください。