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

Object Storage Service:オブジェクトのコピー

最終更新日:Dec 19, 2023

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

使用状況ノート

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

  • ほとんどの場合、ブラウザではOSS SDK for Browser.jsが使用されます。 AccessKeyペアが公開されないようにするには、Security Token Service (STS) から取得した一時的なアクセス資格情報を使用してOSSにアクセスすることを推奨します。

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

  • ソースバケットと宛先バケットのクロスオリジンリソース共有 (CORS) ルールを設定する必要があります。 詳細については、「インストール」をご参照ください。

バケット内のオブジェクトをコピーする

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

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

<ヘッド>
  <meta charset="UTF-8" />
  <title> ドキュメント </title>
</head>

<body>
  <button id='upload'> アップロード </button>
  <button id='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({
       // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
       リージョン: 'yourRegion' 、
       // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
       accessKeyId: 'yourAccessKeyId' 、
       accessKeySecret: 'yourAccessKeySecret' 、
       // STSから取得したセキュリティトークンを指定します。 
       stsToken: 'yourSecurityToken' 、
       // バケットの名前を指定します。 例: examplebucket. 
       bucket: "examplebucket" 、
     });

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

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

    // Upload the object. 
    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ヘッダーを指定します。 headersパラメーターを設定しない場合、宛先オブジェクトのHTTPヘッダーはソースオブジェクトのHTTPヘッダーと同じになります。 ソースオブジェクトのHTTPヘッダーがコピーされます。 
            // headers:{
            // 'Cache-Control': 'no-cache' 、        
            // ソースオブジェクトのETag値がリクエストで指定されたETag値と同じ場合、OSSはオブジェクトをコピーしてOK 200を返します。 
            // 'if-match': '5B3C1A2E053D763E1B002CC607C5 **** '、
            // ソースオブジェクトのETag値がリクエストで指定されたETag値と異なる場合、OSSはオブジェクトをコピーしてOK 200を返します。 
            // 'if-none-match': '5B3C1A2E053D763E1B002CC607C5 **** '、 
            // リクエストで指定された時刻が、オブジェクトが変更された時刻よりも早い場合、OSSはオブジェクトをコピーしてOK 200を返します。 
            // 'if-modified-since': '2021-12-09T07:01:56.000Z' 、 
            // リクエストで指定された時間がオブジェクトが変更された時間よりも遅い場合、OSSはオブジェクトをコピーしてOK 200を返します。 
            // 'if-unmodified-since': '2021-12-09T07:01:56.000Z' 、 
            // 宛先オブジェクトのアクセス制御リスト (ACL) を指定します。 この例では、ACLはprivateに設定されています。これは、オブジェクトの所有者と許可されたユーザーのみがオブジェクトに対する読み取りおよび書き込み権限を持っていることを示します。 
            // 'x-oss-object-acl': 'private' 、 
            // 宛先オブジェクトのタグを指定します。 オブジェクトに対して一度に複数のタグを指定できます。 
            // 'x-oss-tagging': 'Tag1=1&Tag2=2 '、
            // 同じ名前のオブジェクトをCopyObject操作で上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、同じ名前のオブジェクトを上書きしないことを指定します。 
            // 'x-oss-forbid-overwrite': 'true' 、 
    //},
        // メタパラメーターを設定して、宛先オブジェクトのメタデータを指定します。 metaパラメーターを設定しない場合、ターゲットオブジェクトのメタデータはソースオブジェクトのメタデータと同じになります。 ソースオブジェクトのメタデータがコピーされます。 
        // meta:{
            // 場所: 'hangzhou' 、
            // 年: 2015、
            // 人: 'mary'
        //}
        // }
      ).then(r => {
        console.log(r.res.status)
      })
    })

  </script>
</body>

</html> 

バケット間でオブジェクトをコピーする

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

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title> ドキュメント </title>
  </head>

  <body>
    <button id="copy"> コピー </button>
    <!-- SDKファイルのインポート->
    <スクリプト
      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({
        // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
        region: "yourRegion" 、
        // STSから取得した一時的なAccessKeyペアを指定します。 AccessKeyペアは、AccessKey IDとAccessKeyシークレットで構成されます。 
        accessKeyId: "yourAccessKeyId" 、
        accessKeySecret: "yourAccessKeySecret" 、
        // STSから取得したセキュリティトークンを指定します。 
        stsToken: "yourSecurityToken" 、
        // 宛先バケットの名前を指定します。 
        bucket: "destbucket" 、
      });
      const copy = document.getElementById("コピー");

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

参考資料

  • オブジェクトのコピーに使用される完全なサンプルコードについては、『GitHub』をご参照ください。

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