OSS dapat mengirim callback ke server aplikasi setelah unggahan sederhana (PutObject dan PutObjectFromFile) atau unggah multi-bagian (UploadFile) selesai. Untuk mengaktifkan callback, sertakan parameter callback dalam permintaan Anda ke OSS.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.
Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.
Instans OSSClient pada topik ini dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configure a client (Go SDK V1).
Kode contoh
Kode berikut menunjukkan cara menggunakan callback unggahan saat mengunggah string. Bucket tujuan adalah examplebucket, dan objek yang diunggah adalah exampleobject.txt di folder examplefiles.
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instans OSSClient.
// Setel yourEndpoint ke titik akhir bucket. Misalnya, untuk wilayah China (Hangzhou), setel titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan titik akhirnya.
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan wilayahnya.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Setel versi signature.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Tentukan nama bucket, misalnya examplebucket.
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Definisikan parameter callback.
callbackUrl := "http://your.callback.server.address" // Setel URL server callback.
callbackMap := map[string]string{
"callbackUrl": callbackUrl, // Setel URL server callback.
"callbackBody": "bucket=${bucket}&object=${object}", // Setel badan permintaan untuk callback.
"callbackBodyType": "application/x-www-form-urlencoded", // Setel tipe konten badan permintaan untuk callback.
}
// Konversi parameter callback ke string JSON dan lakukan encoding Base64.
callbackStr, err := json.Marshal(callbackMap)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
callbackBase64 := base64.StdEncoding.EncodeToString(callbackStr)
// Setel parameter callback unggahan.
options := []oss.Option{
oss.Callback(callbackBase64),
}
// Buat string yang terdiri dari 1.024 × 1.024 karakter 'a'.
content := strings.Repeat("a", 1024*1024)
// Unggah string tersebut. Pastikan objectPath tidak menyertakan nama bucket.
objectPath := "examplefiles/exampleobject.txt"
err = bucket.PutObject(objectPath, strings.NewReader(content), options...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Cetak pesan sukses.
fmt.Println("Object uploaded with callback successfully.")
}