追加アップロードでは、AppendObject メソッドを使用して、追加可能オブジェクトの末尾にコンテンツを追加できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得されます。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。
オブジェクトが存在しない場合、AppendObject 操作は追加可能オブジェクトを作成します。
オブジェクトが存在する場合:
オブジェクトが追加可能オブジェクトであり、指定された追加位置がオブジェクトの現在の長さと一致する場合、コンテンツはオブジェクトの末尾に追加されます。
オブジェクトが追加可能オブジェクトであっても、指定された追加位置がオブジェクトの現在の長さと一致しない場合、PositionNotEqualToLength 例外がスローされます。
オブジェクトが、シンプルアップロードを使用してアップロードされた標準オブジェクトなどの追加可能オブジェクトではない場合、ObjectNotAppendable 例外がスローされます。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。 Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
AppendObject |
| この操作を呼び出して、既存のオブジェクトにオブジェクトを追加することでオブジェクトをアップロードできます。 |
| 既存のオブジェクトにオブジェクトを追加してオブジェクトをアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。 |
サンプルコード
次のコードは、追加アップロードを実行する方法を示しています。
const OSS = require('ali-oss')
const client = new OSS({
// yourRegion を、バケットが配置されているリージョンに設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、yourRegion を oss-cn-hangzhou に設定します。
region: 'yourRegion',
// 環境変数からアクセス資格情報を取得します。 このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します (例: examplebucket)。
bucket: 'examplebucket',
});
const headers = {
// オブジェクトのアクセス制御リスト (ACL) を指定します。
'x-oss-object-acl': 'private',
// オブジェクトのストレージクラスを指定します。
'x-oss-storage-class': 'Standard',
// サーバー側の暗号化方式を指定します。 この例では、OSS マネージドキー (SSE-OSS) によるサーバー側の暗号化が使用されます。
'x-oss-server-side-encryption': 'AES256',
};
async function append () {
// 最初の追加アップロードを実行します。 戻り値は、次の追加操作の位置を示します。
// objectName は、バケット名を含まないオブジェクトの完全なパスを指定します。 例: destfolder/examplefile.txt。
// localFile は、ファイル拡張子を含むローカルファイルの完全なパスを指定します。 例: /users/local/examplefile.txt。
let result = await client.append('objectName', 'localFile'
// カスタムヘッダーとメタデータ。
//,{headers}
)
// 2 回目の追加操作を実行します。 次の追加の位置は、前の追加操作から返された nextAppendPosition の値です。
result = await client.append('objectName', 'localFile', {
position: result.nextAppendPosition
})
}
append();リファレンス
AppendObject API 操作の詳細については、「AppendObject」をご参照ください。