全部产品
Search
文档中心

Object Storage Service:Menyalin objek (Harmony SDK)

更新时间:Nov 30, 2025

Topik ini menjelaskan cara menggunakan metode CopyObject dari OSS SDK untuk Harmony guna menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan dalam wilayah yang sama. Bucket tujuan dapat berupa bucket sumber itu sendiri atau bucket yang berbeda.

Catatan

  • Untuk informasi lebih lanjut mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir OSS.

  • Untuk menyalin objek, Anda harus memiliki izin baca pada objek sumber serta izin baca dan tulis pada bucket tujuan.

  • Bucket sumber dan bucket tujuan harus berada di wilayah yang sama. Misalnya, objek dalam bucket yang berlokasi di wilayah China (Hangzhou) tidak dapat disalin ke bucket yang berlokasi di wilayah China (Qingdao).

  • Pastikan tidak ada kebijakan retensi yang dikonfigurasi untuk bucket sumber maupun bucket tujuan. Jika ada, pesan error The object you specified is immutable. akan dikembalikan.

Izin

Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui Kebijakan RAM atau Kebijakan bucket.

API

Action

Definisi

CopyObject

oss:GetObject

Menyalin objek dalam satu bucket atau antar bucket dalam wilayah yang sama.

oss:PutObject

oss:GetObjectVersion

Jika Anda menentukan versi objek sumber melalui versionId, izin ini juga diperlukan.

oss:GetObjectTagging

Jika Anda menyalin tag objek melalui x-oss-tagging, izin-izin ini diperlukan.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Jika Anda menentukan tag dari versi tertentu objek sumber melalui versionId, izin ini juga diperlukan.

kms:GenerateDataKey

Saat menyalin objek, jika metadata objek tujuan berisi X-Oss-Server-Side-Encryption: KMS, kedua izin ini diperlukan.

kms:Decrypt

Kode contoh

Berikut adalah contoh kode untuk menyalin objek dalam bucket yang sama.

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

// Buat instans OSSClient.
const client = new Client({
  // Tentukan ID AccessKey yang diperoleh dari Security Token Service (STS).
  accessKeyId: 'yourAccessKeyId',
  // Tentukan Rahasia AccessKey yang diperoleh dari STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Tentukan token keamanan yang diperoleh dari STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});

/**
 * Salin objek ke bucket yang sama.
 * Gunakan metode copyObject untuk menyalin objek sumber ke objek tujuan.
 */
const copyObject = async () => {
  try {
    // Gunakan metode copyObject untuk menyalin objek ke bucket yang sama.
    const res = await client.copyObject({
      bucket: 'targetBucket', // Nama bucket tujuan.
      key: 'targetKey',       // Nama objek tujuan.
      copySourceKey: 'sourceKey', // Nama objek sumber. 
    });

    // Output hasilnya.
    console.log(JSON.stringify(res));
  } catch (err) {
    // Tangkap pengecualian.
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // Kode error.
      console.log('message: ', err.message); // Pesan error.
      console.log('requestId: ', err.requestId); // ID permintaan.
      console.log('status: ', err.status); // Kode status HTTP.
      console.log('ec: ', err.ec); // EC
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// Panggil fungsi copyObject untuk menyalin objek ke bucket yang sama.
copyObject();

Skenario umum

Menyalin objek dari bucket sumber ke bucket tujuan dalam wilayah yang sama

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

// Buat instans OSSClient.
const client = new Client({
  // Tentukan ID AccessKey yang diperoleh dari STS.
  accessKeyId: 'yourAccessKeyId',
  // Tentukan Rahasia AccessKey yang diperoleh dari STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Tentukan token keamanan yang diperoleh dari STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});


/**
 * Salin objek dari bucket lain.
 * Gunakan metode copyObject untuk menyalin objek dari bucket sumber ke bucket tujuan.
 */
const copyObjectFromOtherBucket = async () => {
  try {
    // Panggil metode copyObject untuk menyalin objek dari bucket lain.
    const res = await client.copyObject({
      bucket: 'targetBucket', // Nama bucket tujuan. 
      key: 'targetKey',       // Nama objek tujuan.
      copySourceBucket: 'sourceBucket', // Nama bucket sumber. 
      copySourceKey: 'sourceKey',       // Nama objek sumber. 
    });

    // Output hasilnya.
    console.log(JSON.stringify(res));
  } catch (err) {
    // Tangkap pengecualian.
    if (err instanceof RequestError) {
      console.log('code: ', err.code); // Kode error.
      console.log('message: ', err.message); // Pesan error.
      console.log('requestId: ', err.requestId); // ID permintaan.
      console.log('status: ', err.status); // Kode status HTTP.
      console.log('ec: ', err.ec); // EC
    } else {
      console.log('unknown error: ', err);
    }
  }
};

// Panggil fungsi copyObjectFromOtherBucket untuk menyalin objek dari bucket lain.
copyObjectFromOtherBucket();