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(®ion, "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
Referensi
Untuk informasi lebih lanjut tentang parameter pemrosesan gambar, lihat Parameter Pemrosesan Gambar.
Untuk informasi lebih lanjut tentang fitur pemrosesan sinkron, lihat Pemrosesan Sinkron.
Untuk informasi lebih lanjut tentang fitur pemrosesan sinkron, lihat operasi API ProcessObject.