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

Object Storage Service:ファイルのアップロード (Python SDK V1)

最終更新日:Nov 29, 2025

このトピックでは、シンプルアップロード、追加アップロード、またはマルチパートアップロードを使用して、バージョン管理が有効なバケットにオブジェクトをアップロードする方法について説明します。

注意事項

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

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。

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

  • ファイルをアップロードするには、oss:PutObject 権限が必要です。詳細については、「RAM ユーザーへのカスタムアクセスポリシーの付与」をご参照ください。

シンプルアップロード

バージョン管理が有効なバケットでは、OSS は新しく追加された各オブジェクトに対して一意のバージョン ID を自動的に生成し、その ID を x-oss-version-id レスポンスヘッダーで返します。バージョン管理が一時停止されているバケットでは、新しく追加されたオブジェクトのバージョン ID は "null" になります。同じ名前のオブジェクトをアップロードすると、新しいオブジェクトが以前のオブジェクトを上書きします。OSS では、"null" のバージョン ID を持つことができるオブジェクトのバージョンは 1 つだけです。

次のコードは、シンプルアップロードを実行する方法を示しています。

# -*- 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)

# ファイルをアップロードします。
result = bucket.put_object('yourObjectName', 'content of object')
# HTTP ステータスコード。
print('http response code: {0}'.format(result.status))
# アップロードされたオブジェクトのバージョン ID を表示します。
print('put object version:', result.versionid)

追加アップロード

バージョン管理が有効なバケットでは、追加操作 (AppendObject) は追加可能なオブジェクトの現在のバージョンに対してのみ実行できます。追加可能なオブジェクトの以前のバージョンに対して AppendObject 操作を実行することはできません。

説明
  • 追加可能なオブジェクトの現在のバージョンに対して AppendObject 操作を実行しても、OSS はそのオブジェクトの以前のバージョンを作成しません。

  • 追加可能なオブジェクトの現在のバージョンに対して PutObject または DeleteObject 操作を実行すると、OSS は現在のバージョンを以前のバージョンとして保存します。このオブジェクトにデータを追加することはできなくなります。

  • 通常のオブジェクトや削除マーカーなど、追加不可能なオブジェクトの現在のバージョンに対して AppendObject 操作を実行することはできません。

次のコードは、追加アップロードを実行する方法を示しています。

# -*- 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)

# 最初のアップロードでは、追加位置 (Position パラメーター) を 0 に設定します。
result = bucket.append_object('yourObjectName', 0, 'content of first append')
# データが追加されたオブジェクトのバージョン ID を表示します。
print('append object versionid:', result.versionid)
# これが最初の追加操作でない場合は、bucket.head_object メソッドまたは以前の追加操作の戻り値の next_position プロパティから追加位置を取得できます。
bucket.append_object('yourObjectName', result.next_position, 'content of second append')

マルチパートアップロード

バージョン管理が有効なバケットでは、CompleteMultipartUpload API 操作を呼び出してマルチパートアップロードを完了すると、OSS はオブジェクト全体に対して一意のバージョン ID を生成し、その ID を x-oss-version-id レスポンスヘッダーで返します。

次のコードは、マルチパートアップロードを実行する方法を示しています。

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2 import SizedFileAdapter, determine_part_size
from oss2.models import PartInfo
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、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)

key = 'yourObjectName'
filename = 'yourLocalFile'

total_size = os.path.getsize(filename)
# determine_part_size メソッドは、パートサイズを決定するために使用されます。
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# マルチパートアップロードを初期化します。
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# パートを 1 つずつアップロードします。
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
    # SizedFileAdapter(fileobj, size) メソッドは、新しいファイルオブジェクトを生成し、データを追加するための開始位置を再計算します。
        result = bucket.upload_part(key, upload_id, part_number,
                                    SizedFileAdapter(fileobj, num_to_upload))
        parts.append(PartInfo(part_number, result.etag))

        offset += num_to_upload
        part_number += 1

# マルチパートアップロードを完了します。
result = bucket.complete_multipart_upload(key, upload_id, parts)
# 応答でアップロードされたファイルの versionid を表示します。
print('result.versionid:', result.versionid)


# マルチパートアップロードを検証します。
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

関連ドキュメント

  • シンプルアップロードの API 操作の詳細については、「PutObject」をご参照ください。

  • 追加アップロードの API 操作の詳細については、「AppendObject」をご参照ください。

  • マルチパートアップロードの API 操作の詳細については、「CompleteMultipartUpload」をご参照ください。