Pemrosesan asinkron (x-oss-async-process) memungkinkan program menjalankan tugas lain tanpa menunggu penyelesaian suatu tugas. Topik ini menjelaskan cara menggunakan OSS SDK for Go V2 untuk pemrosesan asinkron 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 mengenai wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan titik akhir OSS. -
Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi tentang cara 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 kembali
|
Nama nilai kembali |
Tipe |
Deskripsi |
|
result |
*AsyncProcessObjectResult |
Nilai kembali dari antarmuka, valid saat err bernilai 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 output yang diinginkan.
package main
import (
"context"
"encoding/base64"
"flag"
"fmt"
"log"
"strings"
"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 dipanggil sebelum main untuk mengatur flag command-line.
func init() {
// Mengatur flag command-line untuk wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Mengatur flag command-line untuk nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
// Mengatur flag command-line untuk nama dokumen yang akan dikonversi.
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
flag.Parse() // Mengurai flag command-line.
// Memverifikasi bahwa wilayah telah disediakan. Jika tidak, mencetak flag default dan keluar.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
// Memverifikasi bahwa nama bucket telah disediakan. Jika tidak, mencetak flag default dan keluar.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
// Memverifikasi bahwa nama objek telah disediakan. Jika tidak, mencetak flag default dan keluar.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek wajib diisi")
}
// Membuat objek konfigurasi yang menggunakan variabel lingkungan untuk kredensial dan wilayah yang ditentukan.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Membuat klien OSS baru menggunakan konfigurasi.
// Menentukan nama file output.
targetKey := "dest.png"
// Membangun string gaya untuk pemrosesan dan konversi dokumen.
animationStyle := "doc/convert,target_png,source_docx" // Menentukan aturan untuk mengonversi dokumen .docx sumber menjadi gambar .png.
// Membangun instruksi pemrosesan, termasuk path penyimpanan dan nama bucket serta nama objek target yang diencode Base64.
bucketNameEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
targetKeyEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetKey)), "=")
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)
// Membangun AsyncProcessObjectRequest untuk memulai tugas pemrosesan asinkron.
request := &oss.AsyncProcessObjectRequest{
Bucket: oss.Ptr(bucketName), // Menentukan bucket yang akan dioperasikan.
Key: oss.Ptr(objectName), // Menentukan objek yang akan diproses.
AsyncProcess: oss.Ptr(process),
}
// Menjalankan permintaan untuk memproses objek secara asinkron dan menerima hasilnya.
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)
}
Skenario Umum
Referensi
-
Untuk informasi lebih lanjut mengenai fitur pemrosesan asinkron, lihat Pemrosesan asinkron.
-
Untuk informasi lebih lanjut mengenai antarmuka API fitur pemrosesan asinkron, lihat AsyncProcessObject.