All Products
Search
Document Center

Object Storage Service:Upload tambah (Go SDK V1)

Last Updated:Nov 29, 2025

Upload tambah menambahkan konten ke objek yang dapat ditambahkan yang sudah ada dengan menggunakan metode AppendObject.

Catatan penggunaan

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya tentang wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasi klien (Go SDK V1).

  • Jika file tidak ada, pemanggilan operasi AppendObject akan membuat objek yang dapat ditambahkan.

  • Jika file sudah ada:

    • Jika file tersebut merupakan objek yang dapat ditambahkan dan posisi tambah yang ditentukan sesuai dengan panjang file saat ini, konten akan ditambahkan ke akhir file.

    • Jika file tersebut merupakan objek yang dapat ditambahkan tetapi posisi tambah yang ditentukan tidak sesuai dengan panjang file saat ini, pengecualian PositionNotEqualToLength akan dilemparkan.

    • Jika file tersebut bukan objek yang dapat ditambahkan, misalnya objek Normal yang diunggah menggunakan upload simple, pengecualian ObjectNotAppendable akan dilemparkan.

Izin

Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui Kebijakan RAM atau Kebijakan bucket.

API

Aksi

Definisi

AppendObject

oss:PutObject

Anda dapat memanggil operasi ini untuk mengunggah objek dengan menambahkannya ke objek yang sudah ada.

oss:PutObjectTagging

Saat mengunggah objek dengan menambahkannya ke objek yang sudah ada, jika Anda menentukan tag objek melalui x-oss-tagging, izin ini diperlukan.

Kode contoh

Kode berikut menunjukkan cara melakukan upload tambah:

package main

import (
	"log"
	"strings"
	"time"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
	}

	// 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, gunakan Titik Akhir yang sebenarnya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sebenarnya.
	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 {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Tentukan nama bucket, misalnya examplebucket.
	bucketName := "examplebucket" // Ganti dengan nama bucket yang sebenarnya.
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket: %v", err)
	}

	// Tentukan path lengkap objek. Jangan sertakan nama bucket. Misalnya, appendobject.txt.
	objectName := "appendobject.txt"
	var nextPos int64 = 0

	// Tentukan waktu kedaluwarsa.
	expires := time.Date(2025, time.December, 10, 23, 0, 0, 0, time.UTC)
	options := []oss.Option{
		oss.Expires(expires),
	}

	// Posisi untuk upload tambah pertama adalah 0. Nilai kembali adalah posisi untuk upload tambah berikutnya.
	appendValue1 := "YourObjectAppendValue1"
	nextPos, err = bucket.AppendObject(objectName, strings.NewReader(appendValue1), nextPos, options...)
	if err != nil {
		log.Fatalf("Gagal menambahkan nilai pertama: %v", err)
	}

	// Lakukan upload tambah kedua.
	appendValue2 := "YourObjectAppendValue2"
	nextPos, err = bucket.AppendObject(objectName, strings.NewReader(appendValue2), nextPos)
	if err != nil {
		log.Fatalf("Gagal menambahkan nilai kedua: %v", err)
	}

	log.Println("Upload tambah berhasil diselesaikan.")
}

FAQ

Bagaimana cara menggunakan metode AppendObject jika ini bukan upload tambah pertama?

Dalam skenario berikut, Anda dapat memanggil metode GetObjectDetailedMeta untuk mengambil metadata objek. Hal ini memastikan bahwa data ditambahkan pada posisi yang benar. Metadata tersebut berisi posisi akhir dari upload tambah terakhir.

  1. Pengumpulan log aplikasi:

    • Aplikasi menghasilkan sejumlah besar data log selama waktu proses. Upload tambah memungkinkan Anda terus-menerus menambahkan data log ke objek yang sama alih-alih membuat objek baru setiap kali.

  2. Analitik data real-time:

    • Sistem analitik data real-time sering mengirimkan aliran data kontinu ke sistem penyimpanan. Upload tambah memungkinkan Anda menambahkan aliran data tersebut ke objek yang sama secara real-time, sehingga menyederhanakan pemrosesan batch atau real-time selanjutnya.

...
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
	log.Fatalf("Gagal mendapatkan metadata detail objek: %v", err)
}
nextPos, err = strconv.ParseInt(props.Get("X-Oss-Next-Append-Position"), 10, 64)
if err != nil {
	log.Fatalf("Gagal mengurai posisi berikutnya: %v", err)
}

// Upload tambah.
appendValue2 := "YourObjectAppendValue2"
nextPos, err = bucket.AppendObject(objectName, strings.NewReader(appendValue2), nextPos)
if err != nil {
	log.Fatalf("Gagal menambahkan nilai kedua: %v", err)
}

log.Println("Upload tambah berhasil diselesaikan.")

Referensi

  • Untuk kode contoh lengkap upload tambah, lihat contoh GitHub.

  • Untuk informasi selengkapnya tentang operasi API AppendObject, lihat AppendObject.