再開可能なアップロードを使用して Object Storage Service (OSS) にオブジェクトをアップロードする場合、アップロードの進捗状況を記録するチェックポイントファイルのディレクトリを指定できます。ネットワークの例外またはプログラムエラーが原因でオブジェクトのアップロードが失敗した場合、アップロードタスクはチェックポイントファイルに記録されている位置から再開されます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントが使用されています。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を設定する方法の詳細については、「アクセス認証情報を設定する (Python SDK V1)」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
再開可能なアップロードには、
oss:PutObjectおよび oss:ListParts 権限が必要です。詳細については、「RAM ユーザーにカスタムアクセス権限ポリシーを付与する」をご参照ください。再開可能なアップロードはマルチスレッドです。この関数を呼び出すときは、外部マルチスレッドを使用しないでください。そうしないと、データが繰り返し送信される可能性があります。
ネットワークの状態が良い場合はパートサイズを大きくし、ネットワークの状態が悪い場合はパートサイズを小さくすることができます。
サンプルコード
次のサンプルコードは、再開可能なアップロードを実行する方法を示しています。
# -*- 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"
# バケットが配置されているリージョン (例: cn-hangzhou) を指定します。このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"
# yourBucketName をバケットの名前に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# yourObjectName をオブジェクトの完全なパスに設定します。完全なパスにはバケット名を含めることはできません。例: exampledir/exampleobject.txt。
# yourLocalFile をローカルファイルの完全なパスに設定します。例: D:\\localpath\\examplefile.txt。ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
oss2.resumable_upload(bucket, 'exampledir/exampleobject.txt', 'D:\\localpath\\examplefile.txt')
# store パラメーターを使用してディレクトリを指定しない場合、ブレークポイント情報を保存するために HOME ディレクトリに .py-oss-upload ディレクトリが作成されます。
# Python SDK 2.1.0 以降では、再開可能なアップロードに次のオプションパラメーターがサポートされています。
# import sys
# # アップロードするデータの長さを特定できない場合、total_bytes の値は None です。
# def percentage(consumed_bytes, total_bytes):
# if total_bytes:
# rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
# print('\r{0}% '.format(rate), end='')
# sys.stdout.flush()
# # store パラメーターを使用してディレクトリを指定する場合、ブレークポイント情報は指定されたディレクトリに保存されます。 num_threads を使用して同時アップロードスレッド数を設定する場合は、oss2.defaults.connection_pool_size を同時アップロードスレッド数以上の値に設定します。同時アップロードスレッドのデフォルト数は 1 です。
# oss2.resumable_upload(bucket, '<yourObjectName>', '<yourLocalFile>',
# store=oss2.ResumableStore(root='/tmp'),
# # ファイルサイズがオプションパラメーター multipart_threshold の値以上の場合にマルチパートアップロードを使用することを指定します。デフォルト値は 10 MB です。
# multipart_threshold=100*1024,
# # パートサイズをバイト単位で設定します。値は 100 KB から 5 GB の範囲内である必要があります。デフォルト値は 100 KB です。
# part_size=100*1024,
# # アップロード進捗状況コールバック関数を設定します。
# progress_callback=percentage,
# # num_threads を使用して同時アップロードスレッド数を設定する場合は、oss2.defaults.connection_pool_size を同時アップロードスレッド数以上の値に設定します。同時アップロードスレッドのデフォルト数は 1 です。
# num_threads=4)関連情報
再開可能なアップロードの完全なサンプルコードについては、GitHub の例を参照してください。