全部产品
Search
文档中心

Object Storage Service:Menyalin objek menggunakan OSS SDK untuk Python 2.0

更新时间:Aug 05, 2025

Topik ini menjelaskan cara menggunakan metode CopyObject dari OSS SDK untuk Python versi 2.0 untuk menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan di wilayah yang sama. Bucket tujuan dapat berupa bucket sumber atau bucket lainnya.

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari Wilayah (Hangzhou) Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam sebuah bucket. Jika Anda ingin mengakses sumber daya dalam bucket tersebut dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan lokasi bucket, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.

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

  • Bucket sumber dan bucket tujuan harus berada di wilayah yang sama. Sebagai contoh, objek dalam bucket yang terletak di Wilayah (Hangzhou) Tiongkok tidak dapat disalin ke bucket lain yang terletak di Wilayah (Qingdao) Tiongkok.

  • Pastikan tidak ada kebijakan retensi yang dikonfigurasi untuk bucket sumber dan bucket tujuan. Jika tidak, pesan kesalahan berikut akan ditampilkan: Objek yang Anda tentukan tidak dapat diubah.

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

API

Aksi

Definisi

CopyObject

oss:GetObject

Menyalin objek dalam satu bucket atau antar bucket di 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 ini diperlukan.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Jika Anda menentukan tag 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

Metode

copy_object(request: CopyObjectRequest, **kwargs) → CopyObjectResult

Parameter permintaan

Parameter

Tipe

Deskripsi

request

CopyObjectRequest

Parameter permintaan. Untuk informasi lebih lanjut, lihat CopyObjectRequest.

Parameter umum CopyObjectRequest

Parameter

Tipe

Deskripsi

bucket

str

Nama bucket tujuan.

key

str

Nama objek tujuan.

source_bucket

str

Nama bucket sumber.

source_key

str

Nama objek sumber.

forbid_overwrite

str

Menentukan apakah operasi CopyObject menimpa objek yang sudah ada dengan nama yang sama.

tagging

str

Tag objek tujuan. Anda dapat mengonfigurasi beberapa tag untuk objek tujuan. Contoh: TagA=A&TagB=B.

tagging_directive

str

Metode yang digunakan untuk mengonfigurasi tag untuk objek tujuan. Nilai valid:

  • Copy (default): Tag objek sumber disalin ke objek tujuan.

  • Replace: Tag yang ditentukan dalam permintaan dikonfigurasikan untuk objek tujuan.

Parameter respons

Tipe

Deskripsi

CopyObjectResult

Nilai kembali. Untuk informasi lebih lanjut, lihat CopyObjectResult

Untuk definisi lengkap metode menyalin objek, lihat copy_object.

Kode contoh

Berikut adalah kode contoh yang menunjukkan cara menyalin objek berukuran kurang dari 5 GiB dari bucket sumber ke bucket tujuan:

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser parameter baris perintah.
parser = argparse.ArgumentParser(description="contoh menyalin objek")

# Tentukan parameter --region untuk menunjukkan wilayah tempat bucket berada. Parameter ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tentukan parameter --bucket, yang menentukan nama bucket tujuan. Parameter ini wajib.
parser.add_argument('--bucket', help='Nama bucket tujuan.', required=True)
# Tentukan parameter --endpoint untuk menunjukkan titik akhir wilayah tempat bucket berada. Parameter ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tentukan parameter --key, yang menentukan nama objek tujuan. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek tujuan.', required=True)
# Tentukan parameter --source_key, yang menentukan nama objek sumber. Parameter ini wajib.
parser.add_argument('--source_key', help='Nama objek sumber.', required=True)
# Tentukan parameter --source_bucket, yang menentukan nama bucket sumber. Parameter ini wajib.
parser.add_argument('--source_bucket', help='Nama bucket sumber.', required=True)

def main():
    # Parsing parameter baris perintah.
    args = parser.parse_args()

    # Dapatkan kredensial akses dari variabel lingkungan untuk otentikasi.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Muat konfigurasi default SDK dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Tentukan wilayah tempat bucket berada.
    cfg.region = args.region

    # Jika parameter endpoint diberikan, tentukan titik akhir.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Gunakan konfigurasi untuk membuat instance OSSClient.
    client = oss.Client(cfg)

    # Menyalin objek.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # Nama bucket tujuan.
        key=args.key,  # Nama kunci objek tujuan.
        source_key=args.source_key,  # Nama kunci objek sumber.
        source_bucket=args.source_bucket,  # Nama bucket sumber.
    ))

    # Keluarkan informasi hasil operasi penyalinan.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' ID versi: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi sumber: {result.source_version_id},'
          f' enkripsi sisi server: {result.server_side_encryption},'
          f' enkripsi data sisi server: {result.server_side_data_encryption},'
          f' terakhir dimodifikasi: {result.last_modified},'
          f' etag: {result.etag},'
    )

# Panggil fungsi utama saat skrip dijalankan langsung.
if __name__ == "__main__":
    main()  # Tentukan titik masuk dalam fungsi utama skrip saat skrip dijalankan langsung.

Referensi