追加アップロードは、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({
// バケットが配置されているリージョンに region を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、region を 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 = {
// オブジェクトのアクセス権限を指定します。
'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 回目の追加アップロードを実行します。 次の追加操作の位置は、この追加操作前のオブジェクトの長さ (Content-Length) です。
result = await client.append('objectName', 'localFile', {
position: result.nextAppendPosition
})
}
append();関連ドキュメント
AppendObject API 操作の詳細については、「AppendObject」をご参照ください。