すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:ブラウザ用 OSS SDK を使用した追記アップロード

最終更新日:Apr 02, 2025

AppendObject 操作を呼び出して、既存の追記可能なオブジェクトにコンテンツを追記できます。

使用上の注意

  • ブラウザ用 OSS SDK を使用してバケットに追記アップロードを実行する場合は、バケットに設定されている CORS ルールで Expose Headers を x-oss-next-append-position に設定する必要があります。設定しないと、nextAppendPosition を取得できず、アップロードが失敗します。詳細については、「CORS」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。

  • コンテンツを追記するオブジェクトが存在しない場合、AppendObject 操作によって追記可能なオブジェクトが作成されます。

  • コンテンツを追記するオブジェクトが既に存在する場合、AppendObject 操作を呼び出すと、次のようになります。

    • オブジェクトが追記可能オブジェクトで、追記操作の開始位置として指定された位置が現在のオブジェクトサイズと等しい場合、オブジェクトはオブジェクトの末尾に追記されます。

    • オブジェクトが追記可能オブジェクトで、追記操作の開始位置として指定された位置が現在のオブジェクトサイズと等しくない場合、PositionNotEqualToLength エラーが返されます。

    • オブジェクトが追記可能オブジェクトでない場合、ObjectNotAppendable エラーが返されます。

権限

デフォルトでは、Alibaba Cloud アカウントは、アカウント内のリソースに対するフル権限を持っています。一方、RAM ユーザーと Alibaba Cloud アカウントに関連付けられた RAM ロールは、最初は権限を持っていません。RAM ユーザーまたはロールを使用してリソースを管理するには、RAM ポリシーまたはバケットポリシーを使用して必要な権限を付与する必要があります。

API

アクション

説明

AppendObject

oss:PutObject

既存のオブジェクトにオブジェクトのコンテンツを追記することで、オブジェクトをアップロードします。

oss:PutObjectTagging

追記アップロードを実行するときに、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>ドキュメント</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">オブジェクトのアップロード</button>
    <script>
      const upload = document.getElementById("upload");

      const client = new OSS({
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
        region: 'yourRegion',
        authorizationV4: true,
        // STS から取得した一時的な AccessKey ペアを指定します。
        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」をご参照ください。