Objectのアップロード
このセクションに記載されているSDKメソッドを使用すると、さまざまな方法でBucketにオブジェクトをアップロードできます。オブジェクトを文字列またはストリームとしてアップロードできます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。
オブジェクトに対してVersioningを有効にしていない場合、Stratusが同じオブジェクトに対して複数の書き込みリクエストを受信すると、オブジェクトは継続的に上書きされます。最新のアップロードのオブジェクトのみが保存されます。
ただし、Versioningが有効な場合、各アップロードはオブジェクトのバージョンとみなされ、それぞれ一意のversionIdでBucket内に保存されます。
ストリームとしてのObjectのアップロード
このSDKメソッドを使用すると、ストリームとしてオブジェクトをBucketにアップロードできます。ストリームを変数に格納し、その変数をアップロードメソッドputObject()に渡します。
// オブジェクトアップロード用のリードストリームを作成する
const file = fs.createReadStream("file_path");
// アップロードメソッドを呼び出す
const res = await bucket.putObject("sam/out/sample.txt", file);
console.log(res);
文字列としてのObjectのアップロード
このSDKメソッドを使用すると、オブジェクトを文字列としてアップロードできます。オブジェクト名と、文字列形式でオブジェクトに保存するデータをアップロードメソッドputObject()に渡します。
//オブジェクトを文字列としてアップロードする
const res = await bucket.putObject("sam/out/sample.txt", "Content of the file");
console.log(res);
オプション付きObjectのアップロード
このSDKメソッドを使用すると、オブジェクトのアップロード時に以下のオプションを使用できます。
-
overwrite: BucketでVersioningが有効になっていない場合に使用できるオプションです。バージョニングなしでは、リソースを上書きする場合にこのオプションを使用する必要があります。デフォルト値は「false」です。
-
ttl: オブジェクトのTime-to-Live(TTL)を秒単位で設定するために使用できるオプションです。値は60秒以上である必要があります。
-
metaData: アップロードされるオブジェクトのメタ情報をアップロードするために使用できるオプションです。
-
contentType: オブジェクトのMIMEタイプを設定する必要がある場合に指定できるオプションです。
const options = {
'overwrite': true, //これにより既存のオブジェクトが上書きされます
'ttl': '300', //有効期限(秒単位)
'metaData': {
'author': 'John'
}
};
const file = fs.createReadStream("filePath");
const uploadRes = await bucket.putObject("sam/out/sample.txt", file, options);
console.log(uploadRes);
解凍オプション付きObjectのアップロード
このSDKメソッドを使用してZIPオブジェクトをアップロードすると、ZIP内のオブジェクトが解凍され、アップロードされます。
const options = {
'ttl': '300', //有効期限(秒単位)
'metaData': {
'author': 'John'
},
// 指定されたZIPファイルの内容を展開し、各ファイルを個別のオブジェクトとしてバケットにアップロードする
'extractUpload': true
};
const file = fs.createReadStream("filePath");
const uploadRes = await bucket.putObject("sam/out/sample.zip", file, options);
console.log(uploadRes);
このSDKメソッドはtaskIdの値を返します。この値を使用して、このSDKメソッドで解凍のステータスを確認できます。
レスポンス例
{ 'task_id': '1234263749' }
マルチパートを使用したObjectのアップロード
このセクションでは、Stratus内のBucketに大きなオブジェクトを正常にアップロードするためのSDKメソッドについて説明します。
マルチパートアップロード機能は、複数のHTTPSリクエストで大きなファイルをBucketにアップロードします。すべての個別パートがアップロードされると、これらすべてのリクエストが単一のオブジェクトに結合されます。
アップロードの開始
マルチパート操作を実行するには、マルチパートオブジェクトインスタンスを取得する必要があります。このコンポーネントインスタンスは、Stratus内のBucketに保存されたオブジェクトに対するマルチパート操作を行うさまざまなコードスニペットで参照されます。
使用パラメータ
bucket: このSDKメソッドを使用して事前に初期化しておく必要があるBucketインスタンスです。
const initRes = await bucket.initiateMultipartUpload("sam/out/sample.txt");
console.log(initRes);
レスポンス例
{
"bucket": "zcstratus123-development",
"key": "sam/out/sample.txt",
"upload_id": "01j7xbm4vm5750zbedxqgc4q6m",
"status": "PENDING"
}
Objectのパーツのアップロード
以下のSDKメソッドでは、オブジェクトの個別パーツのアップロードを実行します。各パーツには1〜1000の間の異なるpartNumberがあります。これはパーツの順序を表しますが、これらのパーツは必ずしも順番にアップロードされるわけではありません。すべてのパーツのアップロードが完了すると、これらのパーツは順番に結合されます。
let partNumber = 1;
const file = fs.createReadStream("filePath");
const uploadPartRes = await bucket.uploadPart("sam/out/sample.txt", "uploadId", file, partNumber);
console.log(uploadPartRes);
マルチパートアップロードのサマリーの取得
以下のSDKメソッドを使用して、アップロードされたすべてのパーツの操作サマリーを取得できます。サマリーを表示するには、getMultipartUploadSummary()メソッドを使用します。
const uploadSummaryRes = await bucket.getMultipartUploadSummary("sam/out/sample.txt", "upload_id");
console.log(uploadSummaryRes);
レスポンス例
{
"bucket": "zcstratus12345-development",
"key": "sam/out/sample.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
}
]
}
Objectのマルチパートアップロードの完了
以下のメソッドを使用すると、すべてのパーツが正常にアップロードされた後にマルチパートプロセスを終了できます。プロセスを完了するには、completeMultipartUpload()メソッドにuploadIdを渡します。
const completeUploadRes = await bucket.completeMultipartUpload("sam/out/sample.txt", "uploadId");
console.log(completeUploadRes);
SDK実装例
const catalyst = require('zcatalyst-sdk-node');
const fs = require('fs');
module.exports = async (req, res) => {
url = req.url;
switch (url) {
case '/':
const app = catalyst.initialize(req);
const stratus = app.stratus();
// バケットインスタンスを作成する
const bucket = stratus.bucket("bucket_name");
// マルチパートアップロード
const key = 'sample.mp4';
// マルチパートアップロードを開始する
const initRes = await bucket.initiateMultipartUpload(key);
// アップロード開始レスポンスからアップロードIDを取得する。
const uploadId = initRes['upload_id'];
const filePath = '/Users/Aliza//sam.mp4';
const partSize = 50 * 1024 * 1024; // MB単位
const fileStream = fs.createReadStream(
filePath,
{ highWaterMark: partSize }
);
let partNumber = 1;
const uploadPromises = [];
fileStream.on('data', async (partData) => {
// 各パートのアップロードをPromise配列に追加して並列アップロードする
const partUploadPromise = bucket.uploadPart(
key,
uploadId,
partData,
partNumber
);
uploadPromises.push(partUploadPromise);
console.log('Part Number: ', partNumber);
partNumber++;
});
// すべてのパートが並列でアップロードされるのを待つ
fileStream.on('end', async () => {
await Promise.all(uploadPromises);
// マルチパートアップロードを完了する
await bucket.completeMultipartUpload(key, uploadId);
console.log('Successfully Uploaded');
});
res.end();
break;
default:
res.writeHead(404);
res.write('You might find the page you are looking for at "/" path');
break;
}
}
Transfer Managerを使用したObjectのアップロード
以下のパッケージがインポートされていることを確認してください
const { TransferManager } = require('zcatalyst-sdk-node/lib/stratus');
Transfer Managerインスタンスの作成
const transferManager = new TransferManager(bucket); // Transfer Managerインスタンスを作成
マルチパートアップロード
マルチパートアップロードインスタンスの作成
以下のSDKメソッドは、マルチパートアップロードを開始してマルチパートインスタンスを作成します。
const multipart = await transferManager.createMultipartInstance("sam/out/sample.txt"); // マルチパートインスタンスを作成
既に初期化されたマルチパートアップロード操作のインスタンスを作成する必要がある場合は、以下のコードスニペットをコピーして使用してください。
const multipart = await transferManager.createMultipartInstance("sam/out/sample.txt", "uploadId");
パーツのアップロード
以下のSDKメソッドでは、マルチパートアップロードインスタンスの作成セクションで初期化したmultipartインスタンスを使用します。
const uploadRes = await multipart.uploadPart(fs.createReadStream("filePath"), partNumber);
console.log(uploadRes);
アップロードサマリー
const summaryRes = await multipart.getUploadSummary();
console.log(summaryRes);
アップロードの完了
const completeRes = await multipart.completeUpload();
console.log(completeRes);
ラッパーを使用したObjectのアップロード
以下のSDKメソッドはラッパーとして機能し、複数のステップを使用せずにマルチパートアップロード操作全体が実行されます。この方法を使用すると、オブジェクトは複数のパーツに分割され、複数のパーツとしてBucketにアップロードされ、すべてのパーツがアップロードされると結合されます。
const file = fs.createReadStream("filePath");
const partSize = 50 // MB単位
const objectPartUploadRes = await transferManager.putObjectAsParts("sam/out/sample.txt",file, partSize);
console.log(objectPartUploadRes);
Objectアップロード用の署名付きURLの生成
署名付きURLは、認証済みユーザーが非認証ユーザーに共有できる安全なURLです。このURLは、非認証ユーザーにオブジェクトにアクセスするための一時的な認可を提供します。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。
使用パラメータ
| Parameter Name | Data Type | Definition |
|---|---|---|
| key | String | 必須パラメータです。オブジェクトの完全な名前とパスを保持します。 |
| urlAction | Request Method | 必須パラメータです。アップロード(PUT)アクション用の署名付きURLを生成するためのパラメータです。
|
| expiry | String | 任意パラメータです。URLの有効時間(秒単位)。
|
| activeFrom | String | 任意パラメータです。URLが有効になる時間を含みます。最大値は7日です。デフォルトでは、URLは生成されるとすぐに有効になります。 |
const signedURLRes = await bucket.generatePreSignedUrl("sam/out/sample.txt", 'PUT', {
'expiryIn': 100, // 有効期限(秒)
'activeFrom':'12334454327', // 指定された日付にURLを有効化
});
console.log(signedURLRes);
アップロード用署名付きURLの生成レスポンス例
{
signature: "https://sadi-development.zohostratus.com/_signed/text.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747896279887&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=3YBUX1HFSxNQzQJjFrln82AyJsEEuC5T9dsZwWxGyEE"
}
署名付きURLを使用したObjectアップロードのスニペット例
const axios = require('axios');
const fs = require('fs');
// アップロード用に生成された実際の署名付きURLに置き換えてください。
const url = 'https://sadi-development.zohostratus.com/_signed/text.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747911331272&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=K9vuqC7JaATLeM3TX4xXWx0OHcSflbYQ2jCrbKSAAIE';
// 'file_path'を実際のファイルパスに置き換えてください
const data = fs.createReadStream('/Users/ranjitha-18338/Documents/NODE-SDK/Stratus/sam.py');
// オプションのヘッダー。コンテンツタイプはファイルタイプによって異なる場合があります
const headers = {
// 'Content-Type': 'application/json',
// 非JSONファイルをアップロードする場合は調整してください(例:'text/plain'または'application/octet-stream')
// 'overwrite': 'true', // オプションのヘッダー
};
(async () => {
try {
const response = await axios.put(url, data, { headers });
if (response.status === 200) {
console.log('Object uploaded successfully');
} else {
console.log('⚠️ Error uploading object:', response.data);
}
} catch (error) {
console.error('Upload failed:', error.response?.data || error.message);
}
})();
最終更新日 2026-03-30 13:40:30 +0530 IST
Yes
No
Send your feedback to us