Topik ini menjelaskan cara mengunduh file menggunakan modul Pengunduh, sebuah fitur baru di Go SDK V2.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan ID Wilayah
cn-hangzhoudari Wilayah (Hangzhou) Tiongkok. Secara default, Titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan Titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah OSS dan titik akhir, lihat Wilayah dan Titik Akhir.Contoh-contoh dalam topik ini membaca kredensial akses dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.
Untuk mengunduh file, Anda harus memiliki izin
oss:GetObject. Untuk informasi lebih lanjut, lihat Lampirkan Kebijakan Kustom ke Pengguna RAM.
Definisi metode
Fitur Pengunduh
Pengunduh adalah fitur baru di Go SDK V2 yang menyediakan operasi unduhan universal. Fitur ini mengabstraksi detail implementasi dari operasi tingkat bawah untuk memberikan cara yang nyaman dalam mengunduh file.
Pengunduh menggunakan Unduhan rentang untuk secara otomatis membagi file menjadi bagian-bagian yang lebih kecil dan mengunduh bagian-bagian tersebut secara bersamaan guna meningkatkan kinerja unduhan.
Pengunduh juga menyediakan fitur unduhan yang dapat dilanjutkan. Selama proses unduhan, status bagian yang telah selesai dicatat. Jika pengunduhan file gagal karena masalah seperti gangguan jaringan atau keluar program yang tidak terduga, Anda dapat melanjutkan unduhan dari catatan breakpoint.
Metode umum dari Pengunduh adalah sebagai berikut:
type Downloader struct {
...
}
// Membuat pengunduh baru.
func (c *Client) NewDownloader(optFns ...func(*DownloaderOptions)) *Downloader
// Mengunduh file.
func (d *Downloader) DownloadFile(ctx context.Context, request *GetObjectRequest, filePath string, optFns ...func(*DownloaderOptions)) (result *DownloadResult, err error)Parameter permintaan
Parameter | Tipe | Deskripsi |
ctx | context.Context | Konteks permintaan. Anda dapat menggunakan parameter ini untuk menetapkan periode waktu total untuk permintaan. |
request | *GetObjectRequest | Parameter permintaan untuk Operasi API tertentu. Untuk informasi lebih lanjut, lihat GetObjectRequest. |
filePath | string | Path file lokal. |
optFns | ...func(*DownloaderOptions) | (Opsional) Opsi konfigurasi. |
Tabel berikut menjelaskan parameter umum dari DownloaderOption.
Parameter | Tipe | Deskripsi |
PartSize | int64 | Ukuran bagian. Nilai default adalah 6 MiB. |
ParallelNum | int | Jumlah tugas unduhan bersamaan. Nilai default adalah 3. Parameter ini menentukan batas konkurensi untuk satu panggilan, bukan batas konkurensi global. |
EnableCheckpoint | bool | Menentukan apakah akan mencatat informasi unduhan yang dapat dilanjutkan. Secara default, fitur ini dinonaktifkan. |
CheckpointDir | string | Path tempat file rekaman disimpan. Contoh: /local/dir/. Parameter ini berlaku hanya ketika EnableCheckpoint diatur ke true. |
VerifyData | bool | Menentukan apakah akan memverifikasi nilai CRC-64 dari data yang diunduh saat unduhan dilanjutkan. Secara default, nilai CRC-64 tidak diverifikasi. Parameter ini berlaku hanya ketika EnableCheckpoint diatur ke true. |
UseTempFile | bool | Menentukan apakah akan menggunakan file sementara untuk unduhan. Secara default, file sementara digunakan. File pertama kali diunduh ke file sementara. Setelah unduhan berhasil, file sementara diubah namanya menjadi file objek. |
Saat membuat instance Pengunduh, Anda dapat menentukan opsi konfigurasi untuk menyesuaikan perilaku unduhan defaultnya. Anda juga dapat menentukan opsi konfigurasi untuk setiap operasi unduhan guna menyesuaikan perilaku untuk unduhan tertentu.
Atur parameter konfigurasi untuk Pengunduh:
d := client.NewDownloader(func(do *oss.DownloaderOptions) { do.PartSize = 10 * 1024 * 1024 })Atur parameter konfigurasi untuk setiap permintaan unduhan:
request := &oss.GetObjectRequest{Bucket: oss.Ptr("bucket"), Key: oss.Ptr("key")} d.DownloadFile(context.TODO(), request, "/local/dir/example", func(do *oss.DownloaderOptions) { do.PartSize = 10 * 1024 * 1024 })
Kode contoh
Anda dapat menggunakan kode berikut untuk mengunduh file dari bucket ke perangkat lokal.
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 penyimpanan.
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, "src-object", "", "Nama objek sumber.")
}
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 sumber kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
}
// Konfigurasikan klien OSS.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat pengunduh.
d := client.NewDownloader()
// Bangun permintaan untuk mendapatkan objek.
request := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Key: oss.Ptr(objectName), // Nama objek.
}
// Tentukan path file lokal.
localFile := "local-file"
// Jalankan permintaan untuk mengunduh file.
result, err := d.DownloadFile(context.TODO(), request, localFile)
if err != nil {
log.Fatalf("gagal mengunduh file %v", err)
}
// Cetak pesan sukses.
log.Printf("unduh file %s ke local-file berhasil, ukuran: %d", objectName, result.Written)
}
Skenario
Referensi
Untuk informasi lebih lanjut tentang pengunduh, lihat Panduan Pengembang.
Untuk informasi lebih lanjut tentang operasi API untuk unduhan file, lihat DownloadFile.