全部产品
Search
文档中心

Object Storage Service:Mendaftarkan objek menggunakan OSS SDK untuk Go 2.0

更新时间:Aug 13, 2025

Topik ini menjelaskan cara menampilkan semua objek dalam sebuah bucket menggunakan OSS SDK untuk Go.

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari wilayah Tiongkok (Hangzhou). Secara default, titik akhir publik digunakan untuk mengakses sumber daya dalam sebuah bucket. Jika Anda ingin mengakses sumber daya dalam bucket dengan menggunakan layanan Alibaba Cloud lainnya di wilayah yang sama dengan lokasi bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh Object Storage Service (OSS), lihat Wilayah dan Titik Akhir OSS.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.

  • Izin oss:ListObjects diperlukan untuk menampilkan objek. Untuk informasi lebih lanjut, lihat Berikan Izin Kustom kepada Pengguna RAM.

Metode

Operasi API tingkat lanjut untuk menampilkan objek

Penting
  • OSS SDK untuk Go V2 menyediakan paginator yang mendukung paginasi otomatis. Jika Anda memanggil operasi API beberapa kali, OSS SDK untuk Go V2 secara otomatis mendapatkan hasil halaman berikutnya.

  • Paginator berisi objek dalam format <OperationName>Paginator dan metode pembuatan paginator dalam format New<OperationName>Paginator. Metode pembuatan paginator mengembalikan objek paginator yang mengimplementasikan metode HasNext dan NextPage. Metode HasNext digunakan untuk menentukan apakah ada halaman lain, dan metode NextPage digunakan untuk memanggil operasi API untuk mendapatkan halaman berikutnya.

Kode berikut menjelaskan detail operasi tersebut.

type ListObjectsV2Paginator struct

func (p *ListObjectsV2Paginator) HasNext() bool

func (p *ListObjectsV2Paginator) NextPage(ctx context.Context, optFns ...func(*Options)) (*ListObjectsV2Result, error)

func (c *Client) NewListObjectsV2Paginator(request *ListObjectsV2Request, optFns ...func(*PaginatorOptions)) *ListObjectsV2Paginator

Parameter permintaan

Parameter

Tipe

Deskripsi

request

*ListObjectsV2Request

Parameter untuk operasi API tertentu. Untuk informasi lebih lanjut, lihat ListObjectsV2Request

optFns

...func(*PaginatorOptions)

Opsional. Parameter tingkat operasi. Untuk informasi lebih lanjut, lihat PaginatorOptions.

Tabel berikut menjelaskan parameter umum dari ListObjectsV2.

Parameter

Deskripsi

prefix

Awalan yang harus disertakan dalam nama objek yang dikembalikan.

maxKeys

Jumlah maksimum objek yang dikembalikan setiap kali.

delimiter

Karakter yang digunakan untuk mengelompokkan objek yang ingin Anda tampilkan berdasarkan nama. Objek yang namanya mengandung string yang sama dari awalan yang ditentukan hingga pemisah pertama setelah awalan dikelompokkan sebagai elemen CommonPrefixes.

startAfter

Posisi dari mana operasi daftar dimulai.

fetchOwner

Menentukan apakah akan menyertakan informasi pemilik dalam respons.

  • true: Respons mencakup informasi pemilik.

  • false: Respons tidak mencakup informasi pemilik.

Parameter respons

Parameter respons

Deskripsi

*ListObjectsV2Paginator

Objek paginator yang mengimplementasikan metode HasNext dan NextPage. Metode HasNext digunakan untuk menentukan apakah ada halaman lain dan metode NextPage digunakan untuk memanggil operasi API untuk mendapatkan halaman berikutnya.

Operasi API dasar untuk menampilkan objek

func (c *Client) ListObjectsV2(ctx context.Context, request *ListObjectsV2Request, optFns ...func(*Options)) (*ListObjectsV2Result, error)

Parameter permintaan

Parameter

Tipe

Deskripsi

ctx

context.Context

Konteks permintaan, yang dapat digunakan untuk menentukan durasi total permintaan.

request

*ListObjectsV2Request

Parameter untuk operasi API tertentu. Untuk informasi lebih lanjut, lihat ListObjectsV2Request.

optFns

...func(*Options)

Opsional. Parameter tingkat operasi. Untuk informasi lebih lanjut, lihat Options.

Parameter respons

Parameter respons

Tipe

Deskripsi

result

*ListObjectsV2Result

Respons terhadap operasi. Parameter ini tersedia ketika nilai err adalah nil. Untuk informasi lebih lanjut, lihat ListObjectsV2Result.

err

error

Status permintaan. Jika permintaan gagal, nilai err tidak nil.

Kode contoh

Menampilkan objek menggunakan operasi API tingkat lanjut

Kode berikut menunjukkan cara menampilkan semua objek dalam sebuah bucket menggunakan paginator.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan untuk menampilkan objek.
	request := &oss.ListObjectsV2Request{
		Bucket: oss.Ptr(bucketName),
	}

	// Buat paginator.
	p := client.NewListObjectsV2Paginator(request)

	// Inisialisasi penghitung nomor halaman.
	var i int
	log.Println("Objek:")

	// Lintasi setiap halaman dalam paginator.
	for p.HasNext() {
		i++

		// Dapatkan data pada halaman berikutnya.
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		// Tampilkan informasi tentang setiap objek pada halaman.
		for _, obj := range page.Contents {
			log.Printf("Objek:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

Menampilkan objek menggunakan operasi API dasar

Kode berikut menunjukkan cara menampilkan semua objek dalam sebuah bucket dengan memanggil operasi ListObjectsV2.

package main

import (
	"context"
	"flag"
	"log"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg) 
 
	// Buat permintaan ListObjectsV2.
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
	}

	for {
		// Lakukan operasi untuk menampilkan semua objek.
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Tampilkan hasilnya.
		for _, object := range lsRes.Contents {
			log.Printf("Kunci Objek: %s, Tipe: %s, Ukuran: %d, ETag: %s, Terakhir Dimodifikasi: %s, Kelas Penyimpanan: %s\n",
				*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua objek telah ditampilkan.")
}

Skenario umum

Menampilkan semua objek dalam direktori

Gunakan paginator

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama semua objek dalam direktori tertentu dengan menetapkan parameter Prefix.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan untuk menampilkan objek.
	request := &oss.ListObjectsV2Request{
		Bucket:  oss.Ptr(bucketName),
		Prefix:  oss.Ptr("exampledir/"), // Menampilkan semua objek dalam direktori yang ditentukan
	}

	// Buat paginator.
	p := client.NewListObjectsV2Paginator(request)

	// Inisialisasi penghitung nomor halaman.
	var i int
	log.Println("Objek:")

	// Lintasi setiap halaman dalam paginator.
	for p.HasNext() {
		i++

		fmt.Printf("Halaman %v\n", i)

		// Dapatkan data pada halaman berikutnya.
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		// Cetak token kelanjutan.
		log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
		// Tampilkan informasi tentang setiap objek pada halaman.
		for _, obj := range page.Contents {
			log.Printf("Objek:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

Gunakan ListObjectsV2

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama semua objek dalam direktori tertentu dengan menetapkan parameter Prefix.

package main

import (
	"context"
	"flag"
	"log"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan ListObjectsV2.
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
		Prefix:            oss.Ptr("exampledir/"), // Menampilkan semua objek dalam direktori yang ditentukan.
	}

	for {
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Tampilkan hasilnya.
		for _, object := range lsRes.Contents {
			log.Printf("Kunci Objek: %s, Tipe: %s, Ukuran: %d, ETag: %s, Terakhir Dimodifikasi: %s, Kelas Penyimpanan: %s\n",
				*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua objek telah ditampilkan.")
}

Menampilkan objek yang namanya mengandung awalan tertentu

Gunakan paginator

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama semua objek yang namanya mengandung awalan tertentu dengan menetapkan parameter Prefix.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan untuk menampilkan objek.
	request := &oss.ListObjectsV2Request{
		Bucket: oss.Ptr(bucketName),
		Prefix: oss.Ptr("my-object-"), // Menampilkan semua objek yang namanya mengandung awalan tertentu.
	}

	// Buat paginator.
	p := client.NewListObjectsV2Paginator(request)

	// Inisialisasi penghitung nomor halaman.
	var i int
	log.Println("Objek:")

	// Lintasi setiap halaman dalam paginator.
	for p.HasNext() {
		i++

		fmt.Printf("Halaman %v\n", i)

		// Dapatkan data pada halaman berikutnya.
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		// Cetak token kelanjutan.
		log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
		// Tampilkan informasi tentang setiap objek pada halaman.
		for _, obj := range page.Contents {
			log.Printf("Objek:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

Gunakan ListObjectsV2

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama semua objek yang namanya mengandung awalan tertentu dengan menetapkan parameter Prefix.

package main

import (
	"context"
	"flag"
	"log"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan ListObjectsV2.
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
		Prefix:            oss.Ptr("my-object-"),
	}

	for {
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Tampilkan hasilnya.
		for _, object := range lsRes.Contents {
			log.Printf("Kunci Objek: %s, Tipe: %s, Ukuran: %d, ETag: %s, Terakhir Dimodifikasi: %s, Kelas Penyimpanan: %s\n",
				*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua objek telah ditampilkan.")
}

Menampilkan sejumlah objek tertentu

Gunakan paginator

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama sejumlah objek tertentu dengan menetapkan parameter MaxKeys.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan untuk menampilkan objek.
	request := &oss.ListObjectsV2Request{
		Bucket:  oss.Ptr(bucketName),
		MaxKeys: 10, // Jumlah maksimum objek yang dikembalikan setiap kali.
	}

	// Buat paginator.
	p := client.NewListObjectsV2Paginator(request)

	// Inisialisasi penghitung nomor halaman.
	var i int
	log.Println("Objek:")

	// Lintasi setiap halaman dalam paginator.
	for p.HasNext() {
		i++

		fmt.Printf("Halaman %v\n", i)

		// Dapatkan data pada halaman berikutnya.
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		// Cetak token kelanjutan.
		log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
		// Tampilkan informasi tentang setiap objek pada halaman.
		for _, obj := range page.Contents {
			log.Printf("Objek:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

Gunakan ListObjectsV2

Kode contoh menunjukkan cara menampilkan informasi termasuk ukuran, waktu modifikasi terakhir, dan nama sejumlah objek tertentu dengan menetapkan parameter MaxKeys.

package main

import (
	"context"
	"flag"
	"log"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan ListObjectsV2.
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
		MaxKeys:           10, // Jumlah maksimum objek yang dikembalikan setiap kali.
	}

	for {
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Tampilkan hasilnya.
		for _, object := range lsRes.Contents {
			log.Printf("Kunci Objek: %s, Tipe: %s, Ukuran: %d, ETag: %s, Terakhir Dimodifikasi: %s, Kelas Penyimpanan: %s\n",
				*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua objek telah ditampilkan.")
}

Menampilkan semua objek dari posisi tertentu

Gunakan paginator

Kode contoh menunjukkan cara menentukan posisi awal penampilan dengan menetapkan parameter StartAfter. Semua objek yang namanya secara alfabetis setelah nilai parameter StartAfter akan dikembalikan.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan untuk menampilkan objek.
	request := &oss.ListObjectsV2Request{
		Bucket:     oss.Ptr(bucketName),
		StartAfter: oss.Ptr("my-object"), // Tentukan posisi awal untuk menampilkan objek
	}

	// Buat paginator.
	p := client.NewListObjectsV2Paginator(request)

	// Inisialisasi penghitung nomor halaman.
	var i int
	log.Println("Objek:")

	// Lintasi setiap halaman dalam paginator.
	for p.HasNext() {
		i++

		fmt.Printf("Halaman %v\n", i)

		// Dapatkan data pada halaman berikutnya.
		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		// Cetak token kelanjutan.
		log.Printf("ContinuationToken:%v\n", oss.ToString(page.ContinuationToken))
		// Tampilkan informasi tentang setiap objek pada halaman.
		for _, obj := range page.Contents {
			log.Printf("Objek:%v, %v, %v\n", oss.ToString(obj.Key), obj.Size, oss.ToTime(obj.LastModified))
		}
	}
}

Gunakan ListObjectsV2

Kode contoh menunjukkan cara menentukan posisi awal penampilan dengan menetapkan parameter StartAfter. Semua objek yang namanya secara alfabetis setelah nilai parameter StartAfter akan dikembalikan.

package main

import (
	"context"
	"flag"
	"log"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

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

	// Buat permintaan ListObjectsV2.
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
		StartAfter:        oss.Ptr("my-object"), // Tentukan posisi awal untuk menampilkan objek.
	}

	for {
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Tampilkan hasilnya.
		for _, object := range lsRes.Contents {
			log.Printf("Kunci Objek: %s, Tipe: %s, Ukuran: %d, ETag: %s, Terakhir Dimodifikasi: %s, Kelas Penyimpanan: %s\n",
				*object.Key, *object.Type, object.Size, *object.ETag, object.LastModified.Format(time.RFC3339), *object.StorageClass)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua objek telah ditampilkan.")
}

Menampilkan semua objek di direktori root

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah.
	bucketName string // Nama bucket.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}

func main() {
	flag.Parse() // Parsing parameter baris perintah.

	// Periksa apakah nama bucket telah ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah telah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Buat permintaan ListObjectsV2, dan atur delimiter ke garis miring (/).
	request := &oss.ListObjectsV2Request{
		Bucket:            oss.Ptr(bucketName),
		Delimiter:         oss.Ptr("/"), // Gunakan garis miring (/) sebagai delimiter.
		MaxKeys:           100,          // Jumlah maksimum objek yang dikembalikan per permintaan.
	}

	// Variabel untuk menyimpan semua subdirektori (CommonPrefixes).
	var subdirectories []oss.CommonPrefix

	for {
		lsRes, err := client.ListObjectsV2(context.TODO(), request)
		if err != nil {
			log.Fatalf("Gagal menampilkan objek: %v", err)
		}

		// Log dan kumpulkan subdirektori (CommonPrefixes).
		for _, prefix := range lsRes.CommonPrefixes {
			log.Printf("Subdirektori: %v\n", *prefix.Prefix)
			subdirectories = append(subdirectories, prefix)
		}

		// Jika ada lebih banyak objek untuk ditampilkan, perbarui nilai parameter continueToken untuk mendapatkan hasil yang tersisa.
		if lsRes.IsTruncated {
			request.ContinuationToken = lsRes.NextContinuationToken
		} else {
			break // Akhiri siklus jika tidak ada lagi objek.
		}
	}

	log.Println("Semua subdirektori telah ditampilkan.")
	log.Printf("Total subdirektori: %d\n", len(subdirectories))
}

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk menampilkan objek, kunjungi GitHub.

  • Untuk informasi lebih lanjut tentang operasi API tingkat lanjut yang dapat Anda panggil untuk menampilkan objek, lihat NewListObjectsV2Paginator.

  • Untuk informasi lebih lanjut tentang operasi API dasar yang dapat Anda panggil untuk menampilkan objek, lihat ListObjectsV2.

  • Untuk informasi lebih lanjut tentang paginator, lihat Panduan Pengembang.