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

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

最終更新日:Nov 30, 2025

このトピックでは、Harmony 向け OSS SDK の CopyObject メソッドを使用して、サイズが 5 GiB 未満のオブジェクトを同一リージョン内のソースバケットから宛先バケットにコピーする方法について説明します。宛先バケットは、ソースバケットと同じバケット、または異なるバケットを指定できます。

注意事項

  • サポートされているリージョンとエンドポイントの詳細については、「OSS のリージョンとエンドポイント」をご参照ください。

  • オブジェクトをコピーするには、ソースオブジェクトに対する読み取り権限と、宛先バケットに対する読み取りおよび書き込み権限が必要です。

  • ソースバケットと宛先バケットは、同一リージョンに配置する必要があります。例えば、中国 (杭州) リージョンにあるバケット内のオブジェクトを、中国 (青島) リージョンにあるバケットにコピーすることはできません。

  • ソースバケットと宛先バケットに保持ポリシーが設定されていないことを確認してください。設定されている場合、The object you specified is immutable. というエラーメッセージが返されます。

権限

デフォルトでは、Alibaba Cloud アカウントはすべての権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーによって操作権限を付与する必要があります。

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

サンプルコード

以下は、同一バケット内でオブジェクトをコピーするコード例です。

import Client, { RequestError } from '@aliyun/oss';

// OSSClient インスタンスを作成します。
const client = new Client({
  // Security Token Service (STS) から取得した AccessKey ID を指定します。
  accessKeyId: 'yourAccessKeyId',
  // STS から取得した AccessKey Secret を指定します。
  accessKeySecret: 'yourAccessKeySecret',
  // STS から取得したセキュリティトークンを指定します。
  securityToken: 'yourSecurityToken',
  // バケットが配置されているリージョンを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'oss-cn-hangzhou',
});

/**
 * 同一バケットにオブジェクトをコピーします。
 * copyObject メソッドを使用して、ソースオブジェクトを宛先オブジェクトにコピーします。
 */
const copyObject = async () => {
  try {
    // copyObject メソッドを使用して、同一バケットにオブジェクトをコピーします。
    const res = await client.copyObject({
      bucket: 'targetBucket', // 宛先バケットの名前。
      key: 'targetKey',       // 宛先オブジェクトの名前。
      copySourceKey: 'sourceKey', // ソースオブジェクトの名前。 
    });

    // 結果を出力します。
    console.log(JSON.stringify(res));
  } catch (err) {
    // 例外をキャッチします。
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // エラーコード。
      console.log('message: ', err.message); // エラーメッセージ。
      console.log('requestId: ', err.requestId); // リクエスト ID。
      console.log('status: ', err.status); // HTTP ステータスコード。
      console.log('ec: ', err.ec); // EC
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// copyObject 関数を呼び出して、オブジェクトを同一バケットにコピーします。
copyObject();

一般的なシナリオ

同一リージョン内のソースバケットから宛先バケットへのオブジェクトのコピー

import Client, { RequestError } from '@aliyun/oss';

// OSSClient インスタンスを作成します。
const client = new Client({
  // STS から取得した AccessKey ID を指定します。
  accessKeyId: 'yourAccessKeyId',
  // STS から取得した AccessKey Secret を指定します。
  accessKeySecret: 'yourAccessKeySecret',
  // STS から取得したセキュリティトークンを指定します。
  securityToken: 'yourSecurityToken',
  // バケットが配置されているリージョンを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'oss-cn-hangzhou',
});


/**
 * 別のバケットからオブジェクトをコピーします。
 * copyObject メソッドを使用して、ソースバケットから宛先バケットにオブジェクトをコピーします。
 */
const copyObjectFromOtherBucket = async () => {
  try {
    // copyObject メソッドを呼び出して、別のバケットからオブジェクトをコピーします。
    const res = await client.copyObject({
      bucket: 'targetBucket', // 宛先バケットの名前。 
      key: 'targetKey',       // 宛先オブジェクトの名前。
      copySourceBucket: 'sourceBucket', // ソースバケットの名前。 
      copySourceKey: 'sourceKey',       // ソースオブジェクトの名前。 
    });

    // 結果を出力します。
    console.log(JSON.stringify(res));
  } catch (err) {
    // 例外をキャッチします。
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // エラーコード。
      console.log('message: ', err.message); // エラーメッセージ。
      console.log('requestId: ', err.requestId); // リクエスト ID。
      console.log('status: ', err.status); // HTTP ステータスコード。
      console.log('ec: ', err.ec); // EC
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// copyObjectFromOtherBucket 関数を呼び出して、別のバケットからオブジェクトをコピーします。
copyObjectFromOtherBucket();