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

Object Storage Service:オブジェクトのコピー (Browser.js SDK)

最終更新日:Nov 30, 2025

このトピックでは、同一リージョン内のバケット内またはバケット間でオブジェクトをコピーする方法について説明します。

注意事項

  • Webpack や Browserify などのパッケージングツールを使用する場合は、npm install ali-oss コマンドを実行して OSS SDK for Browser.js をインストールします。

  • ほとんどの場合、OSS SDK for Browser.js はブラウザで使用されます。 AccessKey ペアの漏洩を防ぐため、セキュリティトークンサービス (STS) から取得した一時的なアクセス認証情報を使用して Object Storage Service (OSS) にアクセスすることを推奨します。

    一時的なアクセス認証情報は、AccessKey ペアとセキュリティトークンで構成されます。 AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。 一時的なアクセス認証情報を取得する方法の詳細については、「STS を使用した一時的なアクセス権限付与」をご参照ください。

  • コピー操作のソースバケットと宛先バケットには、オリジン間リソース共有 (CORS) ルールが設定されている必要があります。 詳細については、「事前準備」をご参照ください。

権限

デフォルトでは、Alibaba Cloud アカウント (root ユーザー) はすべての権限を持っています。 Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM Policy または Bucket policies を通じて操作権限を付与する必要があります。

API

アクション

定義

CopyObject

oss:GetObject

同一リージョン内のバケット内またはバケット間でオブジェクトをコピーします。

oss:PutObject

oss:GetObjectVersion

versionId を通じてソースオブジェクトのバージョンを指定する場合、この権限も必要です。

oss:GetObjectTagging

x-oss-tagging を通じてオブジェクトタグをコピーする場合、これらの権限が必要です。

oss:PutObjectTagging

oss:GetObjectVersionTagging

versionId を通じてソースオブジェクトの特定バージョンのタグを指定する場合、この権限も必要です。

kms:GenerateDataKey

オブジェクトをコピーする際に、宛先オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。

kms:Decrypt

バケット内でのオブジェクトのコピー

次のコードは、examplebucket バケット内で srcobject.txt オブジェクトを destobject.txt にコピーする方法を示しています。

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8" />
  <title>Document</title>
</head>

<body>
  <button id='upload'>Upload</button>
  <button id='copy'>Copy</button>
    <!--SDK ファイルをインポートします。-->
  <script type="text/javascript" src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
  <script type="text/javascript">
    const client = new OSS({
       // バケットが所在するリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、yourRegion を oss-cn-hangzhou に設定します。
       region: 'yourRegion',
       authorizationV4: true,
       // STS から取得した一時的な AccessKey ID と AccessKey Secret。
       accessKeyId: 'yourAccessKeyId',
       accessKeySecret: 'yourAccessKeySecret',
       // STS から取得したセキュリティトークン。
       stsToken: 'yourSecurityToken',
       // バケット名を指定します。 例:examplebucket。
       bucket: "examplebucket",
     });

    const upload = document.getElementById('upload')
    const copy = document.getElementById('copy')

    // アップロードするオブジェクトのコンテンツを指定します。
    const file = new Blob(['examplecontent'])
    // アップロードするオブジェクトの完全なパスを指定します。 例:srcobject.txt。
    const fileName = 'srcobject.txt'

    // オブジェクトをアップロードします。
    upload.addEventListener('click', () => {
      const result = client.put(fileName, file).then(r => console.log(r))
    })

    // オブジェクトをコピーします。
    copy.addEventListener('click', () => {
      // 宛先オブジェクトの名前を指定します。
      client.copy('destobject.txt', fileName
        // 宛先オブジェクトの HTTP ヘッダーとカスタムメタデータを設定します。
        //{
            // headers パラメーターを指定して、宛先オブジェクトの HTTP ヘッダーを設定します。 このパラメーターを指定しない場合、宛先オブジェクトはソースオブジェクトと同じ HTTP ヘッダーを持ちます。
            // headers:{
            //'Cache-Control': 'no-cache',        
            // コピー操作は、ソースオブジェクトの ETag が指定された ETag と一致する場合にのみ実行されます。
            //'if-match': '5B3C1A2E053D763E1B002CC607C5****',
            // コピー操作は、ソースオブジェクトの ETag が指定された ETag と一致しない場合にのみ実行されます。
            //'if-none-match': '5B3C1A2E053D763E1B002CC607C5****', 
            // コピー操作は、ソースオブジェクトが指定された時刻以降に変更された場合にのみ実行されます。
            //'if-modified-since': '2021-12-09T07:01:56.000Z', 
            // コピー操作は、ソースオブジェクトが指定された時刻以降に変更されていない場合にのみ実行されます。
            //'if-unmodified-since': '2021-12-09T07:01:56.000Z', 
            // 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、ACL は private (非公開) に設定されています。 これは、オブジェクト所有者と権限付与されたユーザーのみが読み取りおよび書き込み権限を持つことを意味します。 他のユーザーはオブジェクトにアクセスできません。
            //'x-oss-object-acl': 'private', 
            // オブジェクトのタグを指定します。 複数のタグを指定できます。
            //'x-oss-tagging': 'Tag1=1&Tag2=2',
            // 同じ名前の宛先オブジェクトを上書きするかどうかを指定します。 この例では、上書きを防ぐために値が true に設定されています。
            //'x-oss-forbid-overwrite': 'true', 
    //},
        // meta パラメーターを指定して、宛先オブジェクトのメタデータをカスタマイズします。 このパラメーターを指定しない場合、宛先オブジェクトはソースオブジェクトと同じメタデータを持ちます。
        // meta:{
            // location: 'hangzhou',
            // year: 2015,
            // people: 'mary'
        //}
        // }
      ).then(r => {
        console.log(r.res.status)
      })
    })

  </script>
</body>

</html>

バケット間でのオブジェクトのコピー

次のコードは、srcbucket ソースバケットから destbucket 宛先バケットの destobject.txt オブジェクトに srcobject.txt オブジェクトをコピーする方法を示しています。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>

  <body>
    <button id="copy">Copy</button>
    <!--SDK ファイルをインポートします。-->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // バケットが所在するリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、yourRegion を oss-cn-hangzhou に設定します。
        region: "yourRegion",
        authorizationV4: true,
        // STS から取得した一時的な AccessKey ID と AccessKey Secret。
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // STS から取得したセキュリティトークン。
        stsToken: "yourSecurityToken",
        // 宛先バケット名を指定します。
        bucket: "destbucket",
      });
      const copy = document.getElementById("copy");

      copy.addEventListener("click", () => {
        client
          .copy(
            // 宛先オブジェクトの名前を指定します。
            "srcobject.txt",
            // ソースオブジェクトの名前を指定します。
            "destobject.txt",
            // ソースバケット名を指定します。
            "srcbucket"
          )
          .then((r) => console.log(r));
      });
    </script>
  </body>
</html>

関連ドキュメント

  • オブジェクトをコピーするための完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • オブジェクトをコピーするための API 操作の詳細については、「CopyObject」をご参照ください。