All Products
Search
Document Center

Object Storage Service:Pembatasan bandwidth koneksi tunggal (Go SDK V1)

Last Updated:Nov 29, 2025

Topik ini menjelaskan cara menambahkan parameter dalam permintaan unggah atau unduh objek untuk mengatur batas bandwidth unggah atau unduh, sehingga memastikan tersedianya bandwidth yang cukup bagi aplikasi lain.

Catatan penggunaan

  • Dalam 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 Regions and endpoints.

  • Kredensial akses dalam topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya mengenai cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • Instans OSSClient dalam 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 contoh berikut menunjukkan cara mengonfigurasi pembatasan bandwidth koneksi tunggal untuk unggah dan unduh sederhana:

package main

import (
	"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 titik akhir wilayah bucket. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), gunakan cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	options := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	options = append(options, oss.Region("yourRegion"))
	// Setel versi signature.
	options = append(options, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", options...)
	if err != nil {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Setel nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Setel path lengkap file lokal yang akan diunggah. Misalnya, D:\\localpath\\examplefile.txt.
	// Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal default proyek.
	localFilePath := "D:\\localpath\\examplefile.txt"
	fd, err := os.Open(localFilePath)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFilePath, err)
	}
	defer fd.Close()

	// Setel batas kecepatan unggah. Nilainya berupa angka, dan satuan defaultnya adalah bit/s. Contoh ini menetapkan batas sebesar 5 MB/s.
	var traffic int64 = 41943040

	// Unggah file dengan pembatasan bandwidth.
	// Setel path lengkap objek. Path lengkap tidak boleh mengandung nama bucket.
	objectName := "exampledir/exampleobject.txt"
	err = bucket.PutObject(objectName, fd, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal mengunggah objek '%s': %v", objectName, err)
	}

	// Unduh file dengan pembatasan bandwidth.
	// Setel path lengkap objek (misalnya, exampledir/exampleobject.txt) dan path lengkap file lokal (misalnya, D:\\localpath\\exampleobject.txt). Path lengkap objek tidak boleh mengandung nama bucket.
	downloadFilePath := "D:\\localpath\\exampleobject.txt"
	err = bucket.GetObjectToFile(objectName, downloadFilePath, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal mengunduh objek '%s' ke '%s': %v", objectName, downloadFilePath, err)
	}

	log.Println("Unggah dan unduh berhasil diselesaikan")
}

Skenario

Atur pembatasan bandwidth koneksi tunggal untuk unggah multi-bagian

Kode berikut menunjukkan cara mengatur pembatasan bandwidth koneksi tunggal untuk unggah multi-bagian.

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 titik akhir wilayah bucket. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), gunakan cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	options := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	options = append(options, oss.Region("yourRegion"))
	// Setel versi signature.
	options = append(options, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", options...)
	if err != nil {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Setel nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Setel batas kecepatan unggah. Nilainya berupa angka, dan satuan defaultnya adalah bit/s. Contoh ini menetapkan batas sebesar 5 MB/s.
	traffic := int64(41943040)

	// Unggah file besar menggunakan unggah multi-bagian.
	// Pisahkan file menjadi tiga bagian. Anda dapat menyesuaikan jumlah bagian berdasarkan ukuran file.
	localFilePath := "localFile"
	chunks, err := oss.SplitFileByPartNum(localFilePath, 3)
	if err != nil {
		log.Fatalf("Gagal memisahkan file '%s': %v", localFilePath, err)
	}

	// Buka file.
	fd, err := os.Open(localFilePath)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFilePath, err)
	}
	defer fd.Close()

	// Inisialisasi file untuk diunggah.
	objectName := "exampledir/exampleobject.txt"
	imur, err := bucket.InitiateMultipartUpload(objectName)
	if err != nil {
		log.Fatalf("Gagal menginisiasi unggah multi-bagian untuk '%s': %v", objectName, err)
	}

	// Unggah bagian-bagian dengan pembatasan bandwidth.
	var parts []oss.UploadPart
	for _, chunk := range chunks {
		_, err := fd.Seek(chunk.Offset, io.SeekStart)
		if err != nil {
			log.Fatalf("Gagal mencari offset %d dalam file '%s': %v", chunk.Offset, localFilePath, err)
		}
		part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, oss.TrafficLimitHeader(traffic))
		if err != nil {
			log.Fatalf("Gagal mengunggah bagian %d dari '%s': %v", chunk.Number, objectName, err)
		}
		parts = append(parts, part)
	}

	// Selesaikan unggahan.
	_, err = bucket.CompleteMultipartUpload(imur, parts)
	if err != nil {
		log.Fatalf("Gagal menyelesaikan unggah multi-bagian untuk '%s': %v", objectName, err)
	}

	log.Println("Unggah multi-bagian berhasil diselesaikan")
}

Atur pembatasan bandwidth koneksi tunggal untuk unggah append

Kode berikut menunjukkan cara mengatur pembatasan bandwidth koneksi tunggal untuk unggah append.

package main

import (
	"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 titik akhir wilayah bucket. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), gunakan cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	options := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	options = append(options, oss.Region("yourRegion"))
	// Setel versi signature.
	options = append(options, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", options...)
	if err != nil {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Setel nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Setel batas kecepatan unggah. Nilainya berupa angka, dan satuan defaultnya adalah bit/s. Contoh ini menetapkan batas sebesar 5 MB/s.
	traffic := int64(41943040)

	// Lakukan unggah append.
	// localFileOne dan localFileTwo adalah path lengkap dua file lokal yang akan diunggah. Setelah localFileOne diunggah, localFileTwo akan ditambahkan ke dalamnya.
	localFileOne := "localFileOne"
	localFileTwo := "localFileTwo"

	// Buka file pertama.
	fd1, err := os.Open(localFileOne)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFileOne, err)
	}
	defer fd1.Close()

	// Buka file kedua.
	fd2, err := os.Open(localFileTwo)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFileTwo, err)
	}
	defer fd2.Close()

	// Definisikan path lengkap objek.
	objectName := "exampledir/exampleobject.txt"

	// Inisialisasi nextPos.
	var nextPos int64

	// Tambahkan file pertama.
	nextPos, err = bucket.AppendObject(objectName, fd1, nextPos, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal menambahkan objek '%s' dari file '%s': %v", objectName, localFileOne, err)
	}

	// Tambahkan file kedua.
	nextPos, err = bucket.AppendObject(objectName, fd2, nextPos, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal menambahkan objek '%s' dari file '%s': %v", objectName, localFileTwo, err)
	}

	log.Println("Unggah append berhasil diselesaikan")
}

Atur pembatasan bandwidth koneksi tunggal untuk unggah dan unduh yang menggunakan URL yang ditandatangani

Kode berikut menunjukkan cara mengatur pembatasan bandwidth koneksi tunggal saat menggunakan URL yang ditandatangani untuk mengunggah dan mengunduh file.

package main

import (
	"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 titik akhir wilayah bucket. Misalnya, untuk wilayah China (Hangzhou), gunakan https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan titik akhir yang sesuai.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), gunakan cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
	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)
	}

	// Setel nama bucket. Misalnya, examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Unggah file menggunakan URL yang ditandatangani.
	// Setel path lengkap file lokal. Misalnya, D:\\localpath\\exampleobject.txt.
	localFilePath := "D:\\localpath\\exampleobject.txt"
	fd, err := os.Open(localFilePath)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFilePath, err)
	}
	defer fd.Close()

	// Setel batas kecepatan unggah. Nilainya berupa angka, dan satuan defaultnya adalah bit/s. Contoh ini menetapkan batas sebesar 5 MB/s.
	traffic := int64(41943040)

	// Dapatkan URL untuk mengunggah file.
	// Setel path lengkap objek. Path lengkap tidak boleh mengandung nama bucket.
	objectName := "exampledir/exampleobject.txt"
	strURL, err := bucket.SignURL(objectName, oss.HTTPPut, 60, oss.TrafficLimitParam(traffic))
	if err != nil {
		log.Fatalf("Gagal menghasilkan URL yang ditandatangani untuk mengunggah '%s': %v", objectName, err)
	}

	// Unggah file lokal.
	err = bucket.PutObjectWithURL(strURL, fd)
	if err != nil {
		log.Fatalf("Gagal mengunggah objek '%s': %v", objectName, err)
	}

	// Unduh file menggunakan URL yang ditandatangani.
	// Dapatkan URL untuk mengunduh file.
	strURL, err = bucket.SignURL(objectName, oss.HTTPGet, 60, oss.TrafficLimitParam(traffic))
	if err != nil {
		log.Fatalf("Gagal menghasilkan URL yang ditandatangani untuk mengunduh '%s': %v", objectName, err)
	}

	// Setel path lengkap tempat objek diunduh ke file lokal.
	downloadFilePath := "D:\\localpath\\exampleobject.txt"
	err = bucket.GetObjectToFileWithURL(strURL, downloadFilePath)
	if err != nil {
		log.Fatalf("Gagal mengunduh objek '%s' ke '%s': %v", objectName, downloadFilePath, err)
	}

	log.Println("Unggah dan unduh berhasil diselesaikan")
}

Referensi

  • Untuk informasi selengkapnya mengenai operasi API untuk mengunggah file, lihat PutObject.

  • Untuk informasi selengkapnya mengenai operasi API untuk mengunduh file, lihat GetObjectToFile.