Topik ini menjelaskan cara menggunakan metode unduhan sederhana untuk mengunduh objek dari bucket Object Storage Service (OSS) ke file lokal. Metode ini mudah digunakan dan cocok untuk mengunduh objek dengan cepat.
Catatan Penggunaan
Kode contoh dalam topik ini menggunakan ID wilayah
cn-hangzhouuntuk Wilayah Hangzhou, Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.Dalam topik ini, kredensial akses diambil dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.
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 |
GetObject |
| Mengunduh sebuah objek. |
| Saat mengunduh objek, jika Anda menentukan versi objek melalui versionId, izin ini diperlukan. | |
| Saat mengunduh objek, jika metadata objek berisi X-Oss-Server-Side-Encryption: KMS, izin ini diperlukan. |
Definisi Metode
func (c *Client) GetObject(ctx context.Context, request *GetObjectRequest, optFns ...func(*Options)) (*GetObjectResult, error)Parameter Permintaan
Parameter | Tipe | Deskripsi |
ctx | context.Context | Konteks permintaan. Anda dapat menggunakan parameter ini untuk menentukan batas waktu total untuk permintaan. |
request | *GetObjectRequest | Parameter permintaan untuk operasi API tertentu. Untuk informasi lebih lanjut, lihat GetObjectRequest. |
optFns | ...func(*Options) | (Opsional) Parameter konfigurasi tingkat operasi. Untuk informasi lebih lanjut, lihat Options. |
Nilai Kembali
Nilai Kembali | Tipe | Deskripsi |
result | *GetObjectResult | Nilai kembali dari operasi API. Parameter ini hanya valid jika err adalah nil. Untuk informasi lebih lanjut, lihat GetObjectResult. |
err | error | Status permintaan. Jika permintaan gagal, nilai err tidak akan menjadi nil. |
Kode Contoh
Berikut adalah kode contoh yang menunjukkan cara mengunduh objek dari bucket ke file lokal.
package main
import (
"context"
"flag"
"io"
"log"
"os"
"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.
objectName string // Nama objek.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Periksa apakah nama objek kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek diperlukan")
}
// Tentukan jalur file keluaran.
outputFile := "downloaded.file" // Ganti string ini dengan jalur tempat Anda ingin menyimpan file.
// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk meminta objek.
request := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Key: oss.Ptr(objectName), // Nama objek.
}
// Minta objek dan proses hasilnya.
result, err := client.GetObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mendapatkan objek %v", err)
}
defer result.Body.Close() // Pastikan badan respons ditutup saat fungsi berakhir.
// Baca seluruh konten file sekaligus.
data, err := io.ReadAll(result.Body)
if err != nil {
log.Fatalf("gagal membaca objek %v", err)
}
// Tulis konten ke file.
err = os.WriteFile(outputFile, data, 0644)
if err != nil {
log.Fatalf("gagal menulis ke file keluaran %v", err)
}
log.Printf("file berhasil diunduh ke %s", outputFile)
}
Skenario
Referensi
Untuk kode contoh lengkap untuk mengunduh objek ke file lokal, lihat contoh GitHub.
Untuk informasi lebih lanjut tentang operasi API untuk mengunduh objek ke file lokal, lihat GetObjectToFile dan GetObject.