オブジェクトのアップロード
このセクションに記載されているSDKメソッドを使用すると、さまざまな方法でオブジェクトをアップロードしてバケットに保存できます。オブジェクトは文字列またはストリームとしてアップロードできます。以下のコードスニペットで使用されているBucketの参照は、コンポーネントインスタンスです。
オブジェクトに対してバージョニングを有効にしていない場合、Stratusが同じオブジェクトに対して複数の書き込みリクエストを受け取ると、オブジェクトは継続的に上書きされます。最後にアップロードされたオブジェクトのみが保存されます。
ただし、バージョニングを有効にすると、各アップロードはオブジェクトのバージョンとして扱われ、すべてが一意のversion_idを持つバケットに保存されます。
ストリームとしてオブジェクトをアップロード
このSDKメソッドを使用すると、ストリームとしてバケットにオブジェクトをアップロードできます。ストリームを変数に格納し、その変数をアップロードメソッドに渡します。
file = open('file_path','rb')
res = bucket.put_object("sam/out/sample.txt",file)
print(res)
文字列としてオブジェクトをアップロード
このSDKメソッドを使用すると、文字列としてオブジェクトをアップロードできます。アップロードメソッドput_object()にオブジェクト名と、文字列形式で保存するデータを渡します。
res = bucket.put_object("sam/out/sample.txt",'content of the file')
print(res)
オプション付きでオブジェクトをアップロード
このSDKメソッドを使用すると、オブジェクトをアップロードする際に以下のオプションを使用できます。
-
overwrite: バケットのバージョニングが有効になっていない場合に使用できるオプションです。バージョニングなしでリソースを上書きする場合は、このオプションを使用する必要があります。デフォルト値は「false」です。
-
ttl: オブジェクトのTime-to-Live(TTL)を秒単位で設定するために使用できるオプションです。値は60秒以上である必要があります。
-
meta_data: アップロードするオブジェクトのメタ詳細をアップロードするために使用できるオプションです。
-
content_type: オブジェクトのMIMEタイプを設定する必要がある場合に使用できるオプションです。
options = {
'overwrite': 'true',
'ttl': '300', #有効期限を秒単位で指定する
'meta_data': {
'author': 'John'
}
}
file = open('file_path','rb')
res = bucket.put_object("sam/out/sample.txt",file, options)
print(res)
展開オプション付きでオブジェクトをアップロード
以下のメソッドを使用してzipファイルをアップロードすると、zipファイルが展開され、オブジェクトがバケットにアップロードされます。
# extract_uploadを含むアップロードオプションを定義する
options = {
# オブジェクトが既に存在する場合は上書きする
'overwrite': 'true',
# オブジェクトが期限切れになるまでの有効期間(秒)
'ttl': '300',
# ZIPファイルの内容を自動的に展開する
'extract_upload': 'true',
# オブジェクトのMIMEタイプ
'content-type': 'application/zip',
# オブジェクトに関連付けられたカスタムメタデータ
'meta_data': {
'author': 'Sam'
}
}
#バイナリモードでファイルを開く
file = open('sam.zip', 'rb')
#ZIPの内容をアップロードして展開する
res = bucket.put_object('sam/sample.zip', file, options)
このSDKメソッドはtask_idを返します。このtask_idをこちらのSDKメソッドで使用して、展開のステータスを確認できます。
レスポンス例
{ 'task_id': '1234263749' }
マルチパートを使用したオブジェクトのアップロード
このセクションでは、Stratus内のバケットに大きなオブジェクトを正常にアップロードするためのSDKメソッドについて説明します。
マルチパートアップロード機能は、複数のHTTPSリクエストで大きなファイルをバケットにアップロードします。すべての個別パーツがアップロードされると、これらのリクエストはすべて単一のオブジェクトに統合されます。
マルチパートアップロードの開始
マルチパート操作を実行するには、マルチパートオブジェクトインスタンスを取得する必要があります。Stratus内のバケットに保存されているオブジェクトに対するマルチパート操作を実行するさまざまなコードスニペットで、このコンポーネントインスタンスを参照します。
使用するパラメータ
bucket: こちらのSDKメソッドを使用して事前に初期化したバケットインスタンスです。
init_res = bucket.initiate_multipart_upload(key="")
print(init_res)
レスポンス例
{
bucket: 'zcstratus123-development',
key: 'objectName.txt',
upload_id: '01j7xbm4vm5750zbedxqgc4q6m',
status: 'PENDING'
}
オブジェクトのパーツのアップロード
以下のSDKメソッドでは、オブジェクトの個々のパーツのアップロードを実行します。各パーツには1から1000の範囲の固有のpartNumberがあります。これはパーツの順序を表しますが、これらのパーツは必ずしも順番にアップロードされるわけではありません。すべてのパーツのアップロードが完了すると、これらのパーツは順序通りに統合されます。
upload_res = bucket.upload_part(key="",upload_id="", part_number=3, body=open('file_path','rb'))
print(upload_res)
マルチパートアップロードのサマリー取得
以下のSDKメソッドを使用すると、アップロードされたすべてのパーツの操作サマリーを取得できます。サマリーを表示するには、get_multipart_upload_summary()メソッドを使用します。
summary_res = bucket.get_multipart_upload_summary(key="", upload_id="")
print(summary_res)
レスポンス例
{
"bucket": "zcstratus12345-development",
"key": "sasm.txt",
"upload_id": "01hyfyeazrrstmt7k5fa7ej726",
"status": "PENDING",
"parts": [
{
"part_number": 1,
"size": 0,
"uploaded_at": 1716374678999
},
{
"part_number": 2,
"size": 2797094,
"uploaded_at": 1716374678576
},
{
"part_number": 4,
"size": 0,
"uploaded_at": 1716374679136
}
]
}
オブジェクトのマルチパートアップロードの完了
以下のメソッドを使用すると、すべてのパーツが正常にアップロードされた後にマルチパートプロセスを終了できます。プロセスを完了するには、complete_multipart_upload()メソッドにuploadIdを渡します。
complete_res = bucket.complete_multipart_upload(key="", upload_id="")
print(complete_res)
SDK実装例
from concurrent.futures import ThreadPoolExecutor
import zcatalyst_sdk
def handler(request: Request):
app = zcatalyst_sdk.initialize()
if request.path == "/":
# Stratusインスタンス
stratus = app.stratus()
# バケットインスタンス
bucket = stratus.bucket('bucket_name')
# マルチパートアップロード
key = "sam/out/sample.txt"
file_path = '/sam/smple.mp4'
initiate_res = bucket.initiate_multipart_upload(key)
part_number = 1
part_size = 50 * 1024 * 1024
futures = []
try:
with open(file_path, 'rb') as file:
with ThreadPoolExecutor(max_workers=3) as executor:
while True:
chunk = file.read(part_size)
if not chunk:
break
futures.append(executor.submit(
bucket.upload_part,
key,
initiate_res['upload_id'],
chunk, part_number
)
)
part_number += 1
for future in futures:
future.result()
except Exception as err:
raise err
multipart_upload_res = bucket.complete_multipart_upload(key, initiate_res['upload_id'])
return multipart_upload_res
else:
response = make_response('Unknown path')
response.status_code = 400
return response
Transfer Managerを使用したオブジェクトのアップロード
アップロードするオブジェクトが大きすぎてアップロードできない場合、Transfer Manager操作を実行できます。Transfer Manager操作はオブジェクトを複数のパーツに分割し、より高速なアップロードを実行します。このSDKセクションでは、Transfer Managerを使用してStratusにオブジェクトをアップロードするために利用可能なすべてのSDKメソッドについて説明します。
Transfer Managerインスタンスの取得
Transfer Manager操作を実行するには、Transfer Managerオブジェクトインスタンスを取得する必要があります。Stratus内のバケットに保存されているオブジェクトに対するTransfer Manager操作を実行するさまざまなコードスニペットで、このコンポーネントインスタンスを参照します。
使用するパラメータ
bucket: こちらのSDKメソッドを使用して事前に初期化したバケットインスタンスです。
以下のパッケージがインポートされていることを確認してください
from zcatalyst_sdk.stratus.transfer_manager import TransferManager
transfer_manager = TranferManager(bucket)
Transfer Managerを使用したオブジェクトのアップロード
このセクションでは、Stratus内のバケットに大きなオブジェクトを正常にアップロードするためのSDKメソッドについて説明します。
マルチパートアップロード機能は、複数のHTTPSリクエストで大きなファイルをバケットにアップロードします。すべての個別パーツがアップロードされると、これらのリクエストはすべて単一のオブジェクトに統合されます。
マルチパートインスタンスの作成
以下のSDKメソッドを使用して、upload_idを生成します。このIDを使用して、オブジェクトに対するマルチパート操作を実行できるインスタンスを作成して返します。
init_ins = transfer_manager.create_multipart_instance(key="")
既に初期化されたマルチパートアップロード操作のインスタンスを作成する必要がある場合は、以下のコードスニペットをコピーして使用してください。
init_ins = transfer_manager.create_multipart_instance(key="", upload_id="")
オブジェクトのパーツのマルチパートアップロードの実行
以下のSDKメソッドでは、オブジェクトの個々のパーツのアップロードを実行します。各パーツには1から1000の範囲の固有のpart_numberがあります。これはパーツの順序を表しますが、これらのパーツは必ずしも順番にアップロードされるわけではありません。すべてのパーツのアップロードが完了すると、これらのパーツは順序通りに統合されます。
使用するパラメータ
- part_number: アップロードされるパーツの順序を保持します。
- body: オブジェクトのデータ/コンテンツを保持します。
upload_res = init_ins.upload_part(body=open('file_path','rb'), part_number=3)
print(upload_res)
マルチパートアップロードのサマリー取得
以下のSDKメソッドを使用すると、アップロードされたすべてのパーツの操作サマリーを取得できます。サマリーを表示するには、get_upload_summary()メソッドを使用します。
summary_res = init_ins.get_upload_summary()
print(summary_res)
オブジェクトのマルチパートアップロードの完了
以下のメソッドを使用すると、すべてのパーツが正常にアップロードされた後にマルチパートプロセスを終了できます。プロセスを完了するには、complete_upload()メソッドにupload_idを渡します。
complete_res = init_ins.complete_upload()
print(complete_res)
Transfer Managerの全機能をラップしたオブジェクトのアップロード
以下のSDKメソッドはラッパーとして機能し、Transfer Managerのアップロード操作全体を複数のステップを使用せずに実行します。このメソッドを使用すると、オブジェクトが複数のパーツに分割され、複数のパーツでバケットにアップロードされ、すべてのパーツがアップロードされると統合されます。
upload_res = transfer_res.put_object_as_parts(key='', body=open('file_path', 'rb'), part_size=50)
print(upload_res)
オブジェクトアップロード用の署名付きURLの生成
署名付きURLは、認証済みユーザーが非認証ユーザーに共有できるセキュアなURLです。このURLは、非認証ユーザーにオブジェクトへのアクセスのための一時的な認可を提供します。以下のコードスニペットで使用されているBucketの参照は、コンポーネントインスタンスです。
使用するパラメータ
| パラメータ名 | データ型 | 定義 |
|---|---|---|
| key | String | 必須パラメータです。オブジェクトのパスを含む完全な名前を保持します。 |
| url_action | Request Method | 必須パラメータです。アップロード(PUT)アクション用の署名付きURLを生成するためのパラメータです。
|
| expiry | String | 任意パラメータです。URLの有効期間(秒単位)です。
|
| active_from | String | 任意パラメータです。URLが有効になる時刻を保持します。最大値は7日間です。デフォルトでは、URLは生成されるとすぐに有効になります。 |
pre_signed_url_res = bucket.generate_presigned_url("sam/out/sample.txt",url_action='PUT',expiry_in_sec='300', active_from='1023453725828')
print(pre_signed_url_res)
アップロード用署名付きURL生成のレスポンス例
{
"signature": "https://sadi-development.zohostratus.com/_signed/code.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747899245773&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=YBPoNE9txCIUWWX3ntdgVd95VTt1jGFlSuvnTRFbCMQ"
file_path = "/Users/ranjitha-18338/Documents/Pyhton-SDK/filestore2.0/output.txt",
"expiry_in_seconds": "300",
"active_from": "1726492859577"
}
署名付きURLを使用したオブジェクトアップロードのスニペット例
import requests
#実際の署名付きURLに置き換える
url = "https://sadi-development.zohostratus.com/_signed/code.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747899245773&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=YBPoNE9txCIUWWX3ntdgVd95VTt1jGFlSuvnTRFbCMQ"
#アップロードするローカルファイルのパス
file_path = "file_path"
#必須ヘッダーを設定する
headers = {
# 'Content-Type': 'text/plain', # ファイルのコンテンツタイプを指定する
# 'overwrite': 'true', # 上書きを示すオプションのカスタムヘッダー(サーバーで必要な場合)
}
#バイナリ読み取りモードでファイルを開き、PUTリクエストを送信してアップロードする
with open(file_path, 'rb') as f:
files = {'file': f} #ファイルペイロードを作成する
response = requests.put(url, headers=headers, files=files)
#レスポンスステータスを確認する
if response.status == 200:
print('Object uploaded successfully')
else:
print('Object upload failed')
最終更新日 2026-03-30 13:40:30 +0530 IST
Yes
No
Send your feedback to us