ストリーミングダウンロードを使用すると、オブジェクトをストリームとして段階的にダウンロードできます。 ラージオブジェクトをダウンロードする場合、またはダウンロードの完了に長時間を要する場合、ストリーミングダウンロードを実行してオブジェクトを段階的にダウンロードできます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントが使用されています。 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)