全部产品
Search
文档中心

Object Storage Service:Mengelola metadata objek menggunakan OSS SDK untuk Python 2.0

更新时间:Aug 05, 2025

Topik ini menjelaskan cara mengonfigurasi dan menanyakan metadata objek menggunakan OSS SDK untuk Python.

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 di bucket. Jika Anda ingin mengakses sumber daya di bucket dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Untuk mengonfigurasi metadata objek, Anda harus memiliki izin oss:PutObject. Untuk menanyakan metadata objek, Anda harus memiliki izin oss:GetObject. Untuk informasi lebih lanjut, lihat Lampirkan kebijakan kustom ke Pengguna RAM.

Konfigurasikan metadata objek selama pengunggahan objek

Konfigurasikan metadata objek selama pengunggahan objek

Berikut adalah kode contoh yang mengunggah objek menggunakan PutObject dan mengonfigurasi header metadata objek seperti waktu kedaluwarsa, daftar kontrol akses (ACL), dan beberapa metadata pengguna. Anda dapat mengonfigurasi metadata objek dengan cara yang sama jika menggunakan operasi API unggah lainnya.

import argparse
import requests
import alibabacloud_oss_v2 as oss

from alibabacloud_oss_v2.models import (
    PutObjectRequest, GetObjectRequest, DeleteObjectRequest,
    ListObjectsRequest, PutBucketRequest, GetBucketAclRequest
    # Kelas lain yang Anda butuhkan.
)

# Buat parser parameter baris perintah.
parser = argparse.ArgumentParser(description="contoh unggah 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 untuk menunjukkan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', 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 untuk menunjukkan nama objek. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)

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

    # 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 titik akhir disediakan, tentukan titik akhir dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # Tentukan string yang ingin Anda unggah.
    text_string = "Halo, OSS!"
    data = text_string.encode('utf-8')  # Enkode string menggunakan enkode UTF-8.

    # Eksekusi permintaan untuk mengunggah objek.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
        metadata={
            'key1': 'value1',
            'key2': 'value2'
        }
    ))

    # Tampilkan kode status HTTP, ID permintaan, hash MD5, ETag, nilai CRC-64, dan ID versi objek untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' md5 konten: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
    )

if __name__ == "__main__":
    main() # Titik masuk skrip. Saat skrip dijalankan langsung, fungsi utama dipanggil.

Tanyakan metadata objek

Tanyakan semua metadata objek menggunakan metode HeadObject

Berikut adalah kode contoh yang menanyakan semua metadata objek menggunakan metode HeadObject:

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser parameter baris perintah dan jelaskan tujuan skrip.
parser = argparse.ArgumentParser(description="contoh head object")

# 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 untuk menunjukkan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', 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 untuk menunjukkan nama objek. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek.', 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()

    # Gunakan konfigurasi default untuk membuat objek konfigurasi (cfg) dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Setel atribut region objek cfg ke region dalam parser.
    cfg.region = args.region

    # Jika titik akhir kustom disediakan, perbarui atribut endpoint objek cfg dengan titik akhir yang diberikan.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # Kirim permintaan untuk mendapatkan header objek.
    result = client.head_object(oss.HeadObjectRequest(
        bucket=args.bucket,           # Tentukan nama bucket.
        key=args.key,                 # Tentukan kunci objek.
    ))

    # Cetak detail hasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' panjang konten: {result.content_length},'
          f' tipe konten: {result.content_type},'
          f' etag: {result.etag},'
          f' terakhir dimodifikasi: {result.last_modified},'
          f' md5 konten: {result.content_md5},'
          f' kontrol cache: {result.cache_control},'
          f' disposisi konten: {result.content_disposition},'
          f' enkode konten: {result.content_encoding},'
          f' kedaluwarsa: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' kelas penyimpanan: {result.storage_class},'
          f' tipe objek: {result.object_type},'
          f' ID versi: {result.version_id},'
          f' jumlah tagging: {result.tagging_count},'
          f' enkripsi sisi server: {result.server_side_encryption},'
          f' enkripsi data sisi server: {result.server_side_data_encryption},'
          f' ID kunci enkripsi sisi server: {result.server_side_encryption_key_id},'
          f' posisi tambah berikutnya: {result.next_append_position},'
          f' kedaluwarsa: {result.expiration},'
          f' pulihkan: {result.restore},'
          f' status proses: {result.process_status},'
          f' permintaan dibebankan: {result.request_charged},'
          f' izinkan asal: {result.allow_origin},'
          f' izinkan metode: {result.allow_methods},'
          f' izinkan usia: {result.allow_age},'
          f' izinkan header: {result.allow_headers},'
          f' paparkan header: {result.expose_headers},'
          )

# Panggil fungsi utama untuk memulai logika pemrosesan saat skrip dijalankan langsung.
if __name__ == "__main__":
    main()  # Tentukan titik masuk skrip. Aliran kontrol dimulai di sini.

Gunakan metode GetObjectMeta untuk menanyakan metadata parsial objek

Catatan

Anda dapat menggunakan metode GetObjectMeta untuk menanyakan hanya metadata parsial objek, termasuk panjang konten yang dikembalikan (ContentLength), tag entitas (ETag), waktu modifikasi terakhir (LastModified), waktu akses terakhir (LastAccessTime), ID versi (VersionId), dan hash CRC-64 (HashCRC64).

Berikut adalah kode contoh yang menanyakan metadata parsial objek menggunakan metode GetObjectMeta:

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser parameter baris perintah dan jelaskan tujuan skrip.
parser = argparse.ArgumentParser(description="contoh get object meta")

# 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 untuk menunjukkan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', 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 untuk menunjukkan nama objek. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek.', 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()

    # Gunakan konfigurasi default untuk membuat objek konfigurasi (cfg) dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Setel atribut region objek cfg ke region dalam parser.
    cfg.region = args.region

    # Jika titik akhir kustom disediakan, perbarui atribut endpoint objek cfg dengan titik akhir yang diberikan.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # Kirim permintaan untuk mendapatkan metadata objek.
    result = client.get_object_meta(oss.GetObjectMetaRequest(
        bucket=args.bucket,           # Tentukan nama bucket.
        key=args.key,                 # Tentukan kunci objek.
    ))

    # Tampilkan kode status HTTP, ID permintaan, panjang konten, ETag, waktu modifikasi terakhir, dan waktu akses terakhir, ID versi objek, dan hash CRC64 untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' panjang konten: {result.content_length},'
          f' etag: {result.etag},'
          f' terakhir dimodifikasi: {result.last_modified},'
          f' waktu akses terakhir: {result.last_access_time},'
          f' ID versi: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          )

# Panggil fungsi utama untuk memulai logika pemrosesan saat skrip dijalankan langsung.
if __name__ == "__main__":
    main()  # Tentukan titik masuk skrip. Aliran kontrol dimulai di sini.

Modifikasi metadata objek yang ada

Gunakan metode CopyObject untuk memodifikasi metadata objek

Berikut adalah kode contoh yang memodifikasi metadata objek menggunakan metode CopyObject:

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser parameter baris perintah.
parser = argparse.ArgumentParser(description="contoh copy object")

# 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 untuk menunjukkan 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 untuk menunjukkan nama objek tujuan. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek tujuan.', required=True)
# Tentukan parameter --source_key untuk menunjukkan nama objek sumber. Parameter ini wajib.
parser.add_argument('--source_key', help='Nama objek sumber.', required=True)
# Tentukan parameter --source_bucket untuk menunjukkan 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 titik akhir disediakan, tentukan titik akhir dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # Salin objek sumber.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,           # Tentukan nama bucket tujuan.
        key=args.key,  # Tentukan kunci objek tujuan.
        source_key=args.source_key,  # Tentukan kunci objek sumber.
        source_bucket=args.source_bucket,  # Tentukan nama bucket sumber.
        metadata={'key1': 'value1', 'key2': 'value2'}, # Tentukan metadata.
        metadata_directive='REPLACE', # Tentukan direktif metadata.
    ))

    # Tampilkan detail hasil operasi.
    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() # Titik masuk skrip. Saat skrip dijalankan langsung, fungsi utama dipanggil.

Gunakan Copier.Copy untuk memodifikasi metadata objek

Anda dapat menggunakan Copier.Copy untuk menyalin objek sumber dan mengonfigurasi metadata untuk objek tujuan. Misalnya, Anda dapat menimpa semua metadata asli yang ada dengan metadata baru, menghapus metadata asli, dan memperbarui hanya header metadata yang ditentukan. Anda juga dapat menentukan apakah akan menghapus objek sumber setelah operasi salin selesai.

import argparse
import alibabacloud_oss_v2 as oss

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

# Tentukan parameter wilayah untuk menunjukkan wilayah tempat bucket berada. Parameter ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)

# Tentukan parameter bucket untuk menunjukkan nama bucket tujuan. Parameter ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)

# Tentukan parameter titik akhir untuk menunjukkan titik akhir OSS yang digunakan untuk mengakses OSS. Parameter ini opsional
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')

# Tentukan parameter kunci untuk menunjukkan nama objek tujuan. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)

# Tentukan parameter source_key untuk menunjukkan nama objek sumber. Parameter ini wajib.
parser.add_argument('--source_key', help='Nama alamat sumber untuk objek.', required=True)

# Tentukan parameter source_bucket untuk menunjukkan nama bucket sumber. Parameter ini wajib.
parser.add_argument('--source_bucket', help='Nama alamat sumber untuk bucket.', required=True)


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

    # Dapatkan kredensial akses dari variabel lingkungan.
    # Dapatkan ID AccessKey dan Rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Gunakan konfigurasi default SDK.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider  # Tentukan penyedia kredensial.
    cfg.region = args.region  # Tentukan wilayah tempat bucket berada.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint  # Jika titik akhir disediakan, tentukan titik akhir dalam objek konfigurasi.

    # Buat instance OSSClient.
    client = oss.Client(cfg)

    # Buat instance copier.
    copier = client.copier()

    # Salin objek sumber.
    result = copier.copy(
        oss.CopyObjectRequest(
            bucket=args.bucket,          # Nama bucket tujuan.
            key=args.key,                # Nama objek tujuan.
            source_bucket=args.source_bucket,  # Nama bucket sumber.
            source_key=args.source_key,  # Kunci objek sumber.
            metadata={'key1': 'value1', 'key2': 'value2'}, # Metadata objek tujuan.
            metadata_directive="REPLACE",   # Tentukan direktif metadata.
        )
    )

    # Tampilkan hasil penyalinan objek.
    # Kembalikan kamus atribut objek hasil menggunakan vars() dan tampilkan kamus.
    print(vars(result))


if __name__ == "__main__":
    main()