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

Object Storage Service:シンプルアップロード (Python SDK V2)

最終更新日:Nov 09, 2025

この Topic では、シンプルアップロードメソッドを使用して単一のファイルを OSS にアップロードする方法について説明します。このメソッドはシンプルで、クラウドストレージへの高速なファイルアップロードに適しています。

重要

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

権限

デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを介して操作権限を付与する必要があります。

API

アクション

定義

PutObject

oss:PutObject

オブジェクトをアップロードします。

oss:PutObjectTagging

オブジェクトのアップロード時に x-oss-tagging を介してオブジェクトタグを指定する場合、この権限が必要です。

kms:GenerateDataKey

オブジェクトのアップロード時に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。

kms:Decrypt

メソッド定義

put_object(request: PutObjectRequest, **kwargs) → PutObjectResult

リクエストパラメーター

パラメーター

タイプ

説明

request

PutObjectRequest

オブジェクトのアクセス制御リスト (ACL)、上書きを禁止するかどうか (ForbidOverwrite)、カスタムメタデータ (Metadata) などのリクエストパラメーターを指定します。詳細については、「PutObjectRequest」をご参照ください。

戻り値

タイプ

説明

PutObjectResult

戻り値。詳細については、「PutObjectResult」をご参照ください。

シンプルアップロードメソッドの完全な定義については、「put_object」をご参照ください。

ローカルファイルのアップロード

オブジェクトをアップロードする際、同じ名前のオブジェクトがバケットに既に存在し、かつ必要な権限を持っている場合、新しいオブジェクトが既存のオブジェクトを上書きします。

ファイルをアップロードするための共通パラメーターは次のとおりです。

パラメーター

説明

bucket_name

バケット名。

バケットの命名規則は次のとおりです。

  • 小文字、数字、ハイフン (-) のみを含めることができます。

  • 小文字または数字で開始および終了する必要があります。

  • 長さは 3~63 文字である必要があります。

object_name

オブジェクトの完全なパス。完全なパスにバケット名を含めることはできません。

オブジェクトの命名規則は次のとおりです。

  • UTF-8 でエンコードする必要があります。

  • 長さは 1~1,023 文字である必要があります。

  • スラッシュ (/) またはバックスラッシュ (\) で始めることはできません。

put_object_from_file メソッドを使用して、ローカルファイルを宛先バケットにアップロードできます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object from 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')

# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

# アップロードするローカルファイルのパスを指定する --file_path コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--file_path', help='The path of Upload file.', required=True)

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # ソフトウェア開発キット (SDK) のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 設定にリージョンを設定します。
    cfg.region = args.region

    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # ファイルから直接オブジェクトをアップロードするリクエストを実行します。
    # バケット名、オブジェクト名、およびローカルファイルのパスを指定します。
    result = client.put_object_from_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # バケットの名前。
            key=args.key         # オブジェクトの名前。
        ),
        args.file_path          # ローカルファイルのパス。
    )

    # リクエストの結果情報 (ステータスコード、リクエスト ID、Content-MD5、ETag、64 ビット巡回冗長検査 (CRC64) ハッシュ、バージョン ID、サーバー応答時間など) を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
          f' server time: {result.headers.get("x-oss-server-time")},'
    )

# スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。
if __name__ == "__main__":
    main()

put_object メソッドを使用してローカルファイルをアップロードする場合、ファイルを 'rb' モードで開く必要があります。これにより、テキストコンテンツではなく元のバイトストリームがアップロードされることが保証され、巡回冗長検査 (CRC) の失敗を防ぎます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object from 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')

# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 設定にリージョンを設定します。
    cfg.region = args.region

    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # ローカルファイルから直接オブジェクトをアップロードするリクエストを実行します。
    # バケット名、オブジェクト名、およびローカルファイルのパスを指定します。
    with open('your-test-file.md', 'rb') as f:
    result = client.put_object(
        oss.PutObjectRequest(
            bucket=args.bucket,  # バケットの名前。
            key=args.key,        # オブジェクトの名前。
            body=f.read()        # ファイルの内容を読み取ります。
        )
    )

    # リクエストの結果情報 (ステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、バージョン ID、サーバー応答時間など) を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
          f' server time: {result.headers.get("x-oss-server-time")},'
    )

# スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。
if __name__ == "__main__":
    main()

一般的なシナリオ

文字列のアップロード

次のコードを使用して、文字列を宛先バケットにアップロードできます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object 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')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定にリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードする文字列を定義します。
    text_string = "Hello, OSS!"
    data = text_string.encode('utf-8')  # 文字列を UTF-8 バイト文字列にエンコードします。

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、データコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、バージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

バイト配列のアップロード

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object 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')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定にリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードするデータコンテンツを定義します。
    data = b'hello world'

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、データコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、バージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

ネットワークストリームのアップロード

次のコードを使用して、ネットワークストリームを宛先バケットにアップロードできます。

import argparse
import requests
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object 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')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定にリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # HTTP GET リクエストを送信して、レスポンスコンテンツを取得します。
    response = requests.get('http://www.aliyun.com')

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、データコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=response.content,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、バージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

ファイルのアップロードとコールバックの設定

次のサンプルコードは、ファイルがアップロードされた後にアプリケーションサーバーに通知する方法を示しています。

import base64
import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="put object sample")

# 必須パラメーターを追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the object.', required=True)
parser.add_argument('--call_back_url', help='Callback server address.', required=True)


def main():

    args = parser.parse_args()

    # 環境変数から認証情報を読み込みます。
    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 クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードするコンテンツ (文字列)。
    data = 'hello world'

    # コールバックパラメーター (callback) を構築します。Webhook アドレスとコールバックリクエストボディを指定し、Base64 エンコーディングを使用します。
    callback=base64.b64encode(str('{\"callbackUrl\":\"' + args.call_back_url + '\",\"callbackBody\":\"bucket=${bucket}&object=${object}&my_var_1=${x:var1}&my_var_2=${x:var2}\"}').encode()).decode()
    # カスタム変数 (callback-var) を構築し、Base64 エンコーディングを使用します。
    callback_var=base64.b64encode('{\"x:var1\":\"value1\",\"x:var2\":\"value2\"}'.encode()).decode()

    # コールバックパラメーターを含むアップロードリクエストを開始します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
        callback=callback,
        callback_var=callback_var,
    ))
    # ステータスコードとリクエスト ID を含む、返された結果を出力します。
    print(vars(result))


if __name__ == "__main__":
    main()

ファイルのアップロードとプログレスバーの表示

次のサンプルコードは、プログレスバーを使用してローカルファイルのアップロードの進行状況を表示する方法を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object 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')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 検証のために環境変数から認証情報を読み込みます。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を読み込み、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定にリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合は、設定にエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードの進行状況を保存するために、progress_state という名前の辞書変数を定義します。初期値は 0 です。
    progress_state = {'saved': 0}
    def _progress_fn(n, written, total):
        # グローバル変数の使用を避けるために、書き込まれたバイトの累積数を辞書に格納します。
        progress_state['saved'] += n

        # 現在のアップロード率を計算します。書き込まれたバイト数を総バイト数で割り、結果を切り捨てます。
        rate = int(100 * (float(written) / float(total)))

        # 現在のアップロードの進行状況を出力します。\r は行頭に戻ることを示し、コマンドラインでのリアルタイム更新を実装します。
        # end='' は改行を追加しないことを示し、次の出力が現在の行を上書きするようにします。
        print(f'\rUpload progress: {rate}% ', end='')

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、データコンテンツを指定します。
    result = client.put_object_from_file(oss.PutObjectRequest(
            bucket=args.bucket,
            key=args.key,
            progress_fn=_progress_fn,
        ),
        "/local/dir/example", # ローカルファイルのパスを指定します。
    )

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、バージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

参照

  • シンプルアップロードの完全なサンプルコードについては、「put_object.py」をご参照ください。