All Products
Search
Document Center

Object Storage Service:Pemrosesan asinkron

Last Updated:Apr 03, 2026

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(&region, "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

Transkoding video

Gunakan fitur transkoding video untuk mengubah format encoding video, mengurangi resolusi dan bitrate guna memperkecil ukuran file video, serta mengonversi format kontainer video.

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 // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari command line
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari command line
	objectName string // Tentukan variabel untuk menyimpan nama objek yang diperoleh dari command line
)

func init() {
	// Gunakan parameter command line untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter command line untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter command line untuk menentukan nama video yang akan ditranskode
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Mengurai parameter command line

	// Periksa apakah wilayah telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}
	// Periksa apakah nama objek telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek wajib diisi")
	}

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

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

	// Tentukan nama video output
	targetObject := "dest.avi"

	// Definisikan gaya pemrosesan. Ini adalah contoh konfigurasi konversi video, termasuk format, kodek video, resolusi, bitrate, laju frame, kodek audio, bitrate audio, dan parameter lainnya
	style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"

	// Bangun instruksi pemrosesan asinkron, termasuk gaya pemrosesan dan lokasi penyimpanan file hasil (nama bucket dan nama objek diencode Base64)
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v",
		style,
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="),   // Encode Base64 nama bucket dan hapus '=' di akhir
		strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "=")) // Encode Base64 nama objek dan hapus '=' di akhir

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket yang akan dioperasikan
		Key:          oss.Ptr(objectName), // Tentukan nama video yang akan diproses
		AsyncProcess: oss.Ptr(process),
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil kembaliannya
	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)
}

Konversi video ke gambar animasi

Konversi video ke gambar animasi dalam format GIF atau WebP menggunakan fitur konversi video ke gambar animasi.

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 // Menyimpan wilayah yang diperoleh dari command line.
	bucketName string // Menyimpan nama bucket yang diperoleh dari command line.
	objectName string // Menyimpan nama objek yang diperoleh dari command line.
)

// Fungsi init dipanggil sebelum main untuk mengatur flag command-line.
func init() {
	// Mengatur flag command-line untuk wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Mengatur flag command-line untuk nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Mengatur flag command-line untuk nama video yang akan diproses.
	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 GIF output.
	targetKey := "destexample.gif"

	// Menentukan parameter untuk konversi video ke GIF, termasuk lebar, tinggi, dan interval frame.
	animationStyle := "video/animation,f_gif,w_100,h_100,inter_1000"

	// 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,topic_QXVkaW9Db252ZXJ0", 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 video 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)
}

Pengambilan sprite video

Ambil frame video dan gabungkan menjadi sprite menggunakan fitur pengambilan sprite video berdasarkan aturan tertentu.

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 // Menyimpan wilayah yang diperoleh dari command line.
	bucketName string // Menyimpan nama bucket yang diperoleh dari command line.
	objectName string // Menyimpan nama objek yang diperoleh dari command line.
)

// Fungsi init dipanggil sebelum main untuk mengatur flag command-line.
func init() {
	// Mengatur flag command-line untuk wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Mengatur flag command-line untuk nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Mengatur flag command-line untuk nama video yang akan diproses.
	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 sprite output.
	targetKey := "example.jpg"

	// Membangun parameter untuk pengambilan sprite video.
	animationStyle := "video/sprite,f_jpg,sw_100,sh_100,inter_10000,tw_10,th_10,pad_0,margin_0"

	// 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,topic_QXVkaW9Db252ZXJ0", 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)
}

Pengambilan frame

Ambil frame video sesuai kebutuhan dan konversikan ke format tertentu dengan fitur pengambilan frame.

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 // Menyimpan wilayah yang diperoleh dari command line.
	bucketName string // Menyimpan nama bucket yang diperoleh dari command line.
	objectName string // Menyimpan nama objek yang diperoleh dari command line.
)

// Fungsi init dipanggil sebelum main untuk mengatur flag command-line.
func init() {
	// Mengatur flag command-line untuk wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Mengatur flag command-line untuk nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Mengatur flag command-line untuk nama video yang akan diproses.
	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 setelah pengambilan frame.
	targetKey := "dest.png"

	// Membangun parameter untuk pengambilan frame.
	animationStyle := "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000"

	// 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,topic_QXVkaW9Db252ZXJ0", 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)
}

Penggabungan video

Gabungkan beberapa video menjadi satu file video dalam format yang ditentukan menggunakan fitur penggabungan video.

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 // Tentukan variabel untuk menyimpan informasi wilayah yang diperoleh dari command line
	bucketName string // Tentukan variabel untuk menyimpan nama bucket yang diperoleh dari command line
)

// Fungsi init dieksekusi sebelum fungsi main untuk menginisialisasi program
func init() {
	// Gunakan parameter command line untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter command line untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Mengurai parameter command line

	// Periksa apakah wilayah telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

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

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

	// Tentukan nama file video output
	targetObject := "dest.mp4"
	// Tentukan nama file video yang akan digabungkan
	video1 := "concat1.mp4"
	video2 := "concat2.mp4"

	// Buat variabel style bertipe string untuk menyimpan parameter penggabungan video
	style := fmt.Sprintf("video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0", strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video1)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video2)), "="))
	// Buat instruksi pemrosesan asinkron
	process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))

	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket yang akan dioperasikan
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil kembaliannya
	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)
}

Transkoding audio

Konversi file audio dari satu format ke format lain dengan transkoding audio.

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 // Menyimpan wilayah yang diperoleh dari command line.
	bucketName string // Menyimpan nama bucket yang diperoleh dari command line.
	objectName string // Menyimpan nama objek yang diperoleh dari command line.
)

// Fungsi init dipanggil sebelum main untuk mengatur flag command-line.
func init() {
	// Mengatur flag command-line untuk wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Mengatur flag command-line untuk nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Mengatur flag command-line untuk nama audio yang akan diproses.
	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 audio hasil transkoding.
	targetKey := "dest.aac"

	// Membangun string gaya dan parameter untuk transkoding audio.
	animationStyle := "audio/convert,ss_10000,t_60000,f_aac,ab_96000"

	// 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,topic_QXVkaW9Db252ZXJ0", 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 file audio 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)
}

Penggabungan audio

Gabungkan beberapa objek audio menjadi satu objek audio dalam format yang ditentukan dengan fitur penggabungan audio.

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 // Menyimpan wilayah yang diperoleh dari command line.
	bucketName string // Menyimpan nama bucket yang diperoleh dari command line.
)

// Fungsi init dipanggil sebelum main untuk mengatur flag command-line.
func init() {
	// Mengatur flag command-line untuk wilayah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Mengatur flag command-line untuk nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

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")
	}

	// 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 file audio yang akan digabungkan.
	audio1 := "src1.mp3"
	audio2 := "src2.mp3"
	// Menentukan nama file audio hasil penggabungan.
	targetAudio := "dest.aac"

	// Membangun string gaya dan parameter untuk penggabungan audio.
	audio1Encoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(audio1)), "=")
	audio2Encoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(audio2)), "=")
	style := fmt.Sprintf("audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0", audio1Encoded, audio2Encoded)

	// Membangun instruksi pemrosesan asinkron.
	bucketEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "=")
	targetEncoded := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetAudio)), "=")
	process := fmt.Sprintf("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded)

	// Membangun AsyncProcessObjectRequest untuk memulai tugas pemrosesan asinkron.
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Menentukan bucket yang akan dioperasikan.
		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)
}

Mengurai watermark buta pada gambar

Kode berikut menunjukkan cara mengurai watermark buta dalam gambar.

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 dieksekusi sebelum fungsi main untuk menginisialisasi program
func init() {
	// Gunakan parameter command line untuk menentukan wilayah
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	// Gunakan parameter command line untuk menentukan nama bucket
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	// Gunakan parameter command line untuk menentukan nama gambar yang akan diproses
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	flag.Parse() // Mengurai parameter command line

	// Periksa apakah wilayah telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}
	// Periksa apakah nama bucket telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}
	// Periksa apakah nama objek telah ditentukan. Jika tidak, tampilkan parameter default dan keluar dari program
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek wajib diisi")
	}

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

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

	// Tentukan nama file gambar watermark
	sourceKey := objectName // Tentukan nama objek gambar yang akan diproses

	// Tentukan topik pesan MNS
	topic := "imm-blindwatermark-test"

	// Ekstrak konten watermark dari gambar yang ditentukan
	style := "image/deblindwatermark,s_low,t_text"
	encodedTopic := strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(topic)), "=")
	process := fmt.Sprintf("%s|sys/notify,topic_%s", style, encodedTopic)
	// Buat permintaan AsyncProcessObject untuk memulai pemrosesan asinkron objek tertentu
	request := &oss.AsyncProcessObjectRequest{
		Bucket:       oss.Ptr(bucketName), // Tentukan nama bucket yang akan dioperasikan
		Key:          oss.Ptr(sourceKey),  // Tentukan nama gambar yang akan diproses
		AsyncProcess: oss.Ptr(process),    
	}

	// Jalankan permintaan untuk memproses objek secara asinkron dan terima hasil kembaliannya
	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)
}

Referensi

  • Untuk informasi lebih lanjut mengenai fitur pemrosesan asinkron, lihat Pemrosesan asinkron.

  • Untuk informasi lebih lanjut mengenai antarmuka API fitur pemrosesan asinkron, lihat AsyncProcessObject.