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-hangzhoudari 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:ListObjectsdiperlukan untuk menampilkan objek. Untuk informasi lebih lanjut, lihat Berikan Izin Kustom kepada Pengguna RAM.
Metode
Operasi API tingkat lanjut untuk menampilkan objek
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)) *ListObjectsV2PaginatorParameter 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.
|
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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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.