Pemrosesan asinkron (x-oss-async-process) memungkinkan program menjalankan tugas lain tanpa menunggu penyelesaian suatu tugas. Topik ini menjelaskan cara menggunakan OSS SDK untuk Go V2 dalam skenario seperti konversi dokumen, transkoding video, dan penggabungan video.
Batasan
Kode contoh dalam topik ini menggunakan wilayah China (Hangzhou) (ID:
cn-hangzhou) dan titik akhir publik secara default. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk panduan mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses.
Metode
func (c *Client) AsyncProcessObject(ctx context.Context, request *AsyncProcessObjectRequest, optFns ...func(*Options)) (*AsyncProcessObjectResult, error)Parameter Permintaan
Parameter | Tipe | Deskripsi |
ctx | context.Context | Konteks permintaan, yang dapat digunakan untuk menentukan durasi total permintaan |
request | *AsyncProcessObjectRequest | Tentukan parameter permintaan untuk antarmuka spesifik. Untuk informasi lebih lanjut, lihat AsyncProcessObjectRequest |
optFns | ...func(*Options) | (Opsional) Parameter konfigurasi tingkat antarmuka. Untuk informasi lebih lanjut, lihat Options |
Daftar Nilai Pengembalian
Nama Nilai Pengembalian | Tipe | Deskripsi |
result | *AsyncProcessObjectResult | Nilai pengembalian antarmuka, valid ketika err adalah nil. Untuk informasi lebih lanjut, lihat AsyncProcessObjectResult |
err | error | Status permintaan. Jika permintaan gagal, nilai err tidak nil |
Kode Contoh
Kode berikut menunjukkan cara menggunakan Go SDK V2 untuk konversi format dokumen guna mencapai jenis keluaran yang diinginkan.
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() {
// Gunakan parameter baris perintah untuk menentukan wilayah
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Gunakan parameter baris perintah untuk menentukan nama bucket
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
// Gunakan parameter baris perintah untuk menentukan nama dokumen yang akan dikonversi
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
flag.Parse() // Parse parameter baris perintah
// Periksa apakah wilayah telah ditentukan. Jika wilayah tidak ditentukan, keluarkan parameter default dan hentikan program
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Periksa apakah nama bucket telah ditentukan. Jika nama bucket tidak ditentukan, keluarkan parameter default dan hentikan program
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah nama objek telah ditentukan. Jika nama objek tidak ditentukan, keluarkan parameter default dan hentikan 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 file keluaran
targetKey := "dest.png"
// Buat variabel gaya bertipe string untuk menyimpan parameter konversi dokumen
animationStyle := "doc/convert,target_png,source_docx" // Tentukan aturan pemrosesan untuk mengonversi dokumen sumber Docx menjadi gambar PNG
// Buat instruksi pemrosesan, termasuk jalur penyimpanan, nama bucket yang di-enkode Base64, dan nama frame yang ditangkap
bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)
// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
request := &oss.AsyncProcessObjectRequest{
Bucket: oss.Ptr(bucketName), // Tentukan nama bucket untuk operasi
Key: oss.Ptr(objectName), // Tentukan nama dokumen untuk diproses
AsyncProcess: oss.Ptr(process),
}
// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil pengembalian
result, err := client.AsyncProcessObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal memproses objek secara asinkron %v", err)
}
log.Printf("hasil pemrosesan objek asinkron:%#v\n", result)
}
Skema Umum
Referensi
Untuk informasi lebih lanjut tentang fitur pemrosesan asinkron, lihat Pemrosesan Asinkron.
Untuk informasi lebih lanjut tentang antarmuka API fitur pemrosesan asinkron, lihat AsyncProcessObject.