全部产品
Search
文档中心

Object Storage Service:Copy an object (Ruby SDK)

更新时间:Nov 30, 2025

Topik ini menjelaskan cara menyalin objek dari bucket sumber ke bucket tujuan yang sama atau berbeda dalam wilayah yang sama.

Catatan penggunaan

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Regions and endpoints.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configuration examples for common scenarios.

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

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

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

Permissions

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 RAM Policy atau Bucket policies.

API

Action

Definition

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 untuk versi tertentu dari 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

Contoh kode

Anda dapat menggunakan bucket.copy_object untuk menyalin objek dan menentukan metadata objek menggunakan parameter :meta_directive. Selama operasi penyalinan, Anda dapat menangani metadata objek dengan salah satu cara berikut:

  • Jika Anda tidak menentukan parameter meta, metadata objek tujuan akan sama dengan metadata objek sumber.

  • Jika Anda menentukan parameter meta, metadata objek sumber akan ditimpa dengan metadata baru.

Kode berikut menunjukkan cara menyalin objek:

require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')

# Salin objek beserta metadatanya.
bucket.copy_object(
  # Pada contoh ini, srcobject.txt disalin sebagai destobject.txt.
  'destobject.txt', 'srcobject.txt',
  :meta_directive => Aliyun::OSS::MetaDirective::COPY)

# Salin objek dan timpa metadatanya.
bucket.copy_object(
  'destobject.txt', 'srcobject.txt',
  :metas => {'year' => '2017'},
  :meta_directive => Aliyun::OSS::MetaDirective::REPLACE)            

Referensi

Untuk informasi selengkapnya tentang operasi API CopyObject, lihat CopyObject.