All Products
Search
Document Center

Object Storage Service:Streaming download (Go SDK V1)

Last Updated:Nov 29, 2025

Topik ini menjelaskan cara menggunakan unduhan streaming untuk memproses konten secara bertahap, yang berguna ketika file berukuran besar atau unduhan sekaligus memerlukan waktu terlalu lama.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai 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 client (Go SDK V1).

  • Untuk melakukan unduhan streaming, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

Unduh objek ke aliran

Kode berikut menunjukkan cara mengunduh objek OSS tertentu ke aliran:

package main

import (
	"io"
	"log"

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

func main() {
	// Peroleh 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 Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di 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 {
		log.Fatalf("Gagal membuat client OSS: %v", err)
	}

	// Setel yourBucketName ke nama bucket.
	bucket, err := client.Bucket("yourBucketName")
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket: %v", err)
	}

	// Unduh objek ke aliran.
	body, err := bucket.GetObject("yourObjectName")
	if err != nil {
		log.Fatalf("Gagal mendapatkan objek: %v", err)
	}
	// Setelah data dibaca, tutup aliran. Jika tidak, dapat terjadi kebocoran koneksi. Hal ini dapat menghabiskan kolam koneksi dan menyebabkan program berhenti bekerja.
	defer body.Close()

	data, err := io.ReadAll(body)
	if err != nil {
		log.Fatalf("Gagal membaca seluruh data dari objek: %v", err)
	}
	log.Println("Data:", string(data))
}

Unduh objek ke buffer

Kode berikut menunjukkan cara mengunduh objek OSS tertentu ke buffer:

package main

import (
	"bytes"
	"io"
	"log"

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

func main() {
	// Peroleh 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 Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di 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 {
		log.Fatalf("Gagal membuat client OSS: %v", err)
	}

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

	// Unduh objek ke buffer.
	// Setel yourObjectName ke path lengkap objek. Path lengkap tidak mencakup nama bucket.
	objectName := "yourObjectName" // Ganti dengan path objek yang sebenarnya.
	body, err := bucket.GetObject(objectName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan objek: %v", err)
	}
	defer body.Close()

	buf := new(bytes.Buffer)
	_, err = io.Copy(buf, body)
	if err != nil {
		log.Fatalf("Gagal menyalin objek ke buffer: %v", err)
	}

	log.Println("Konten buffer:", buf.String())
}

Unduh objek ke file lokal

Kode berikut menunjukkan cara mengunduh objek OSS tertentu ke file lokal:

package main

import (
	"io"
	"log"
	"os"

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

func main() {
	// Peroleh 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 Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di 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 {
		log.Fatalf("Gagal membuat client OSS: %v", err)
	}

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

	// Unduh objek ke file lokal.
	// Setel yourObjectName ke path lengkap objek. Path lengkap tidak mencakup nama bucket.
	objectName := "yourObjectName" // Ganti dengan path objek yang sebenarnya.
	body, err := bucket.GetObject(objectName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan objek: %v", err)
	}
	defer body.Close()

	// Buka atau buat file lokal.
	localFilePath := "LocalFile" // Ganti dengan path file lokal yang sebenarnya.
	fd, err := os.OpenFile(localFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0660)
	if err != nil {
		log.Fatalf("Gagal membuka atau membuat file lokal: %v", err)
	}
	defer fd.Close()

	// Salin konten objek OSS ke file lokal.
	_, err = io.Copy(fd, body)
	if err != nil {
		log.Fatalf("Gagal menyalin objek ke file lokal: %v", err)
	}

	log.Println("File berhasil diunduh ke", localFilePath)
}

Referensi

  • Untuk kode contoh lengkap mengenai unduhan streaming, lihat Contoh GitHub.

  • Untuk informasi selengkapnya mengenai operasi API untuk unduhan streaming, lihat GetObject.