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-hangzhoudari 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 |
| Menyalin objek dalam satu bucket atau antar bucket di wilayah yang sama. |
| ||
| Jika Anda menentukan versi objek sumber melalui versionId, izin ini juga diperlukan. | |
| Jika Anda menyalin tag objek melalui x-oss-tagging, izin ini diperlukan. | |
| ||
| Jika Anda menentukan tag versi tertentu dari objek sumber melalui versionId, izin ini juga diperlukan. | |
| Saat menyalin objek, jika metadata objek tujuan berisi X-Oss-Server-Side-Encryption: KMS, kedua izin ini diperlukan. | |
|
Metode
copy_object(request: CopyObjectRequest, **kwargs) → CopyObjectResultParameter 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:
|
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
Untuk kode contoh lengkap untuk menyalin objek, lihat copy_object.py.