追加アップロードでは、AppendObject メソッドを使用して、既存の追加可能オブジェクトの末尾にコンテンツを追加します。
注意事項
Browser.js ソフトウェア開発キット (SDK) を使用して追加アップロードを実行するには、バケットのオリジン間アクセスのルールで
x-oss-next-append-positionヘッダーを公開する必要があります。そうしないと、追加位置nextAppendPositionを取得できず、アップロードが失敗します。詳細については、「オリジン間リソース共有の設定」をご参照ください。このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化 (Browser.js SDK)」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。
オブジェクトが存在しない場合、AppendObject 操作は新しい追加可能オブジェクトを作成します。
オブジェクトが既に存在する場合に AppendObject 操作を呼び出すと、次のケースが適用されます。
オブジェクトが追加可能オブジェクトであり、指定された追加位置がオブジェクトの現在の長さと同じである場合、コンテンツはオブジェクトの末尾に追加されます。
オブジェクトが追加可能オブジェクトであっても、指定された追加位置がオブジェクトの現在の長さと一致しない場合、PositionNotEqualToLength 例外が返されます。
オブジェクトが、シンプルアップロードでアップロードされた通常オブジェクトなどの追加可能オブジェクトではない場合、ObjectNotAppendable 例外が返されます。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
AppendObject |
| この操作を呼び出して、既存のオブジェクトにオブジェクトを追加することで、オブジェクトをアップロードできます。 |
| 既存のオブジェクトにオブジェクトを追加してアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。 |
使用例
次のコードは、追加アップロードを実行する方法を示しています。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.17.1.min.js"></script>
</head>
<body>
<input type="file" id="file" />
<button id="upload">Upload</button>
<script>
const upload = document.getElementById("upload");
const client = new OSS({
// yourRegion を、バケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、yourRegion を oss-cn-hangzhou に設定します。
region: 'yourRegion',
authorizationV4: true,
// STS から取得した一時的な AccessKey ペア (AccessKey ID と AccessKey Secret)。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
// STS から取得したセキュリティトークン。
stsToken: 'yourSecurityToken',
// バケット名を指定します。
bucket: 'examplebucket'
});
upload.addEventListener("click", async () => {
const target = file.files[0];
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:examplefile.txt。
// 最初の追加アップロード。戻り値は、次の追加操作の位置を示します。
const result = await client.append("examplefile.txt", target);
await client.append("123", result, {
// 2 回目の追加アップロード。後続の追加操作の位置は、追加操作前のオブジェクトの長さ (Content-Length) です。
position: result.nextAppendPosition,
});
});
</script>
</body>
</html>関連ドキュメント
追加アップロードの完全なサンプルコードについては、「GitHub の例」をご参照ください。
追加アップロードの API 操作の詳細については、「AppendObject」をご参照ください。