全部产品
Search
文档中心

Object Storage Service:Pemrosesan sinkron menggunakan OSS SDK untuk Python 2.0

更新时间:Aug 13, 2025

Dalam pemrosesan sinkron, program harus menyelesaikan tugas saat ini sebelum dapat mulai mengeksekusi tugas tambahan. Untuk memproses data secara sinkron dalam Object Storage Service (OSS), Anda dapat menggunakan parameter x-oss-process. Topik ini menjelaskan cara menggunakan OSS SDK untuk Python V2 dalam skenario pemrosesan sinkron, seperti pemrosesan gambar dan dokumen.

Catatan penggunaan

  • 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 bucket. Jika Anda ingin mengakses sumber daya dalam bucket dari 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.

Definisi metode

process_object(request: ProcessObjectRequest, **kwargs) → ProcessObjectResult

Parameter permintaan

Parameter

Tipe

Deskripsi

request

ProcessObjectRequest

Parameter permintaan. Untuk informasi lebih lanjut, lihat ProcessObjectRequest.

Parameter respons

Tipe

Deskripsi

ProcessObjectResult

Nilai kembali. Untuk informasi lebih lanjut, lihat ProcessObjectResult.

Untuk definisi metode lengkap, lihat process_object.

Kode contoh

Berikut adalah kode contoh yang mengubah ukuran gambar dan menyimpan gambar yang telah diubah ukurannya ke bucket yang ditentukan menggunakan OSS SDK untuk Python V2:

import base64
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser untuk mengurai argumen baris perintah dan jelaskan tujuan dari skrip.
parser = argparse.ArgumentParser(description="contoh pemrosesan objek")

# Tentukan argumen baris perintah, termasuk wilayah yang diperlukan, nama bucket sumber, titik akhir, dan nama objek sumber, gaya, nama objek tujuan, dan nama bucket tujuan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--key', help='Nama objek.', required=True)
parser.add_argument('--style', help='Gaya yang akan diterapkan untuk memproses objek, seperti mengubah ukuran gambar.', required=True)
parser.add_argument('--target_image', help='Tentukan nama gambar yang diproses.', required=True)
parser.add_argument('--target_bucket', help='Tentukan nama bucket yang digunakan untuk menyimpan gambar yang diproses.', required=True)

def main():
    # Mengurai argumen 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 cfg dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Tetapkan atribut wilayah objek cfg ke wilayah yang disediakan di baris perintah.
    cfg.region = args.region

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

    # Gunakan pengaturan di atas untuk menginisialisasi instance OSSClient.
    client = oss.Client(cfg)

    # Dapatkan gaya untuk memproses objek.
    # Contoh gaya berikut mengubah ukuran gambar: style = 'image/resize,m_fixed,w_100,h_100'
    style = args.style

    # Enkode Base64 nama bucket tujuan dan nama objek untuk membuatnya aman URL.
    target_bucket_base64 = base64.b64encode(args.target_bucket.encode()).decode()
    target_key_base64 = base64.b64encode(args.target_image.encode()).decode()

    # Buat instruksi pemrosesan yang mencakup gaya dan nama bucket tujuan.
    process = f"{style}|sys/saveas,o_{target_key_base64},b_{target_bucket_base64}"

    # Kirim permintaan untuk memproses objek dan simpan objek yang dihasilkan di bucket tujuan.
    result = client.process_object(oss.ProcessObjectRequest(
        bucket=args.bucket,  # Nama bucket sumber.
        key=args.key,  # Nama objek sumber.
        process=process, # Instruksi pemrosesan.
    ))

    # Tampilkan kode status dan informasi hasil lainnya untuk memeriksa status permintaan dan hasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' bucket: {result.bucket},'
          f' ukuran file: {result.file_size},'
          f' kunci: {result.key},'
          f' status pemrosesan: {result.process_status},'
          )

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

Skenario umum

Tambahkan watermark buta ke gambar

Fitur watermarking buta memungkinkan Anda menambahkan watermark teks buta ke gambar. Kode contoh berikut menambahkan watermark buta ke gambar:

import base64
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser untuk mengurai argumen baris perintah dan jelaskan tujuan dari skrip.
parser = argparse.ArgumentParser(description="contoh pemrosesan objek")

# Tentukan argumen baris perintah, termasuk wilayah yang diperlukan, nama bucket sumber, titik akhir, dan nama objek sumber, gaya, nama objek tujuan, dan nama bucket tujuan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--key', help='Nama objek.', required=True)
parser.add_argument('--target_image', help='Tentukan nama gambar yang diproses.', required=True)
parser.add_argument('--target_bucket', help='Tentukan nama bucket yang digunakan untuk menyimpan gambar yang diproses.', required=True)

def main():
    # Mengurai argumen 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 cfg dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Tetapkan atribut wilayah objek cfg ke wilayah yang disediakan di baris perintah.
    cfg.region = args.region

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

    # Gunakan pengaturan di atas untuk menginisialisasi instance OSSClient.
    client = oss.Client(cfg)

     # Tentukan konten watermark.
    content = "Hak cipta oleh Alibaba Cloud"

    # Hasilkan watermark buta.
    encoded_content = base64.urlsafe_b64encode(content.encode()).decode()

    style = f"image/blindwatermark,content_{encoded_content}"

    # Enkode Base64 nama bucket tujuan dan nama objek untuk membuatnya aman URL.
    target_bucket_base64 = base64.b64encode(args.target_bucket.encode()).decode()
    target_key_base64 = base64.b64encode(args.target_image.encode()).decode()

    # Buat instruksi pemrosesan yang mencakup gaya dan nama bucket tujuan.
    process = f"{style}|sys/saveas,o_{target_key_base64},b_{target_bucket_base64}"

    # Kirim permintaan untuk memproses objek dan simpan objek yang dihasilkan di bucket tujuan.
    result = client.process_object(oss.ProcessObjectRequest(
        bucket=args.bucket,  # Nama bucket sumber.
        key=args.key,  # Nama objek sumber.
        process=process, # Instruksi pemrosesan.
    ))

    # Tampilkan kode status dan informasi hasil lainnya untuk memeriksa status permintaan dan hasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' bucket: {result.bucket},'
          f' ukuran file: {result.file_size},'
          f' kunci: {result.key},'
          f' status pemrosesan: {result.process_status},'
          )

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

Referensi