All Products
Search
Document Center

Object Storage Service:Pemrosesan Sinkron (Go SDK V2)

Last Updated:Nov 09, 2025

Dalam pemrosesan sinkron (x-oss-process), program harus menunggu hingga tugas selesai sebelum dapat menjalankan tugas lainnya. Topik ini menjelaskan cara menggunakan Go SDK V2 untuk pemrosesan sinkron dalam skenario seperti pemrosesan gambar dan dokumen.

Catatan penggunaan

  • Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) (ID wilayah: cn-hangzhou) sebagai contoh. Secara default, titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah yang didukung oleh OSS dan titik akhir, lihat Wilayah dan Titik Akhir OSS.

  • Topik ini memberikan contoh memperoleh kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.

Definisi metode

func (c *Client) ProcessObject(ctx context.Context, request *ProcessObjectRequest, optFns ...func(*Options)) (*ProcessObjectResult, error)

Parameter permintaan

Parameter

Tipe

Deskripsi

ctx

context.Context

Konteks permintaan. Anda dapat menggunakan parameter ini untuk menentukan total waktu habis untuk permintaan.

request

*ProcessObjectRequest

Parameter permintaan untuk operasi API tertentu. Untuk informasi lebih lanjut, lihat ProcessObjectRequest.

optFns

...func(*Options)

(Opsional) Parameter konfigurasi tingkat operasi. Untuk informasi lebih lanjut, lihat Options.

Nilai kembali

Nilai kembali

Tipe

Deskripsi

result

*ProcessObjectResult

Nilai kembali dari operasi API. Parameter ini valid hanya jika err adalah nil. Untuk informasi lebih lanjut, lihat ProcessObjectResult.

err

error

Status permintaan. Jika permintaan gagal, err tidak nil.

Kode contoh

Berikut adalah kode contoh yang menunjukkan cara menggunakan Go SDK V2 untuk mengubah ukuran gambar dan menyimpan gambar yang diproses ke bucket yang ditentukan.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	objectName string
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Tetapkan parameter baris perintah untuk menentukan nama gambar yang akan diproses.
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah informasi wilayah disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, region diperlukan")
	}
	// Periksa apakah nama bucket disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi, dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi.

	// Tentukan nama bucket yang digunakan untuk menyimpan gambar yang diproses. Bucket harus berada di wilayah yang sama dengan bucket yang menyimpan gambar sumber.
	targetBucketName := bucketName
	// Tentukan nama gambar yang diproses. Jika gambar tidak berada di direktori root bucket, Anda harus menyertakan jalur lengkap file, misalnya exampledir/example.jpg.
	targetImageName := "exampledir/example.jpg"
	// Ubah ukuran gambar menjadi lebar dan tinggi tetap 100 px dan simpan ke bucket yang ditentukan.
	style := "image/resize,m_fixed,w_100,h_100"
	process := fmt.Sprintf("%s|sys/saveas,o_%v,b_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))

	// Bangun ProcessObjectRequest untuk memulai pemrosesan sinkron untuk objek tertentu.
	request := &oss.ProcessObjectRequest{
		Bucket:  oss.Ptr(bucketName), // Tentukan nama bucket untuk dioperasikan.
		Key:     oss.Ptr(objectName), // Tentukan nama gambar untuk diproses.
		Process: oss.Ptr(process),    // Tentukan instruksi pemrosesan.
	}

	// Eksekusi permintaan untuk memproses objek secara sinkron dan terima nilai kembali.
	result, err := client.ProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek %v", err)
	}

	log.Printf("hasil pemrosesan objek:%#v\n", result)
}

Skenario

Tambahkan watermark buta ke gambar

Anda dapat menggunakan fitur watermark buta untuk menambahkan watermark teks buta ke gambar.

package main

import (
	"context"
	"encoding/base64"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
	objectName string
)

// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
	// Tetapkan parameter baris perintah untuk menentukan wilayah. Nilai defaultnya adalah string kosong.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Tetapkan parameter baris perintah untuk menentukan nama bucket. Nilai defaultnya adalah string kosong.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Tetapkan parameter baris perintah untuk menentukan nama gambar yang akan diproses.
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Parse parameter baris perintah.

	// Periksa apakah informasi wilayah disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, region diperlukan")
	}
	// Periksa apakah nama bucket disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}
	// Periksa apakah nama objek disediakan. Jika tidak, cetak parameter default dan keluar dari program.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Buat objek konfigurasi, dan gunakan variabel lingkungan sebagai penyedia kredensial dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS baru menggunakan konfigurasi.

	// Tentukan konten watermark.
	content := "Copyright Alibaba Cloud"

	// Hasilkan watermark buta untuk gambar.
	encodedContent := base64.URLEncoding.EncodeToString([]byte(content))
	style := fmt.Sprintf("image/blindwatermark,content_%s", encodedContent)
	targetImageName := "targetDir/target.jpg"
	process := fmt.Sprintf("%s|sys/saveas,o_%s,b_%s", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(bucketName)))

	// Bangun ProcessObjectRequest untuk memulai pemrosesan sinkron untuk objek tertentu.
	request := &oss.ProcessObjectRequest{
		Bucket:  oss.Ptr(bucketName), // Tentukan nama bucket untuk dioperasikan.
		Key:     oss.Ptr(objectName), // Tentukan nama objek untuk diproses.
		Process: oss.Ptr(process),    // Tentukan instruksi pemrosesan.
	}

	// Eksekusi permintaan untuk memproses objek secara sinkron dan terima nilai kembali.
	result, err := client.ProcessObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memproses objek %v", err)
	}

	log.Printf("hasil pemrosesan objek:%#v\n", result)
}

Referensi