Pengunduhan file berukuran besar dapat gagal akibat jaringan yang tidak stabil atau pengecualian program. Bahkan setelah beberapa kali percobaan, pengunduhan tersebut terkadang tetap gagal. Untuk mengatasi masalah ini, Object Storage Service (OSS) menyediakan fitur unduhan yang dapat dilanjutkan, yang membagi file menjadi beberapa bagian, mengunduh setiap bagian secara terpisah, lalu menggabungkannya kembali menjadi satu file utuh.
Metode implementasi
Anda dapat menggunakan metode Bucket#resumable_download untuk melakukan unduhan yang dapat dilanjutkan. Metode ini menggunakan parameter-parameter berikut:
Parameter | Deskripsi | Wajib | Nilai default |
key | Jalur lengkap file OSS. Catatan Jika nilai ETag file yang akan diunduh berubah, pengunduhan akan gagal. | Ya | Tidak ada |
file | Jalur lengkap file lokal tempat hasil unduhan disimpan. | Ya | Tidak ada |
:cpt_file | File yang mencatat informasi breakpoint. Anda harus memiliki izin menulis untuk file ini. Catatan
| Tidak |
|
:disable_cpt | Menentukan apakah kemajuan unduhan direkam. Nilai yang valid:
| Tidak | false |
:part_size | Ukuran setiap shard. | Tidak | 10 MB |
&block | Jika sebuah block diberikan saat pemanggilan, kemajuan unduhan akan ditangani oleh block tersebut. | Tidak | Tidak ada |
Untuk informasi selengkapnya, lihat dokumentasi API.
Kode contoh
Kode berikut memberikan contoh cara melakukan unduhan yang dapat dilanjutkan.
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sesuai.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket, misalnya examplebucket.
bucket = client.get_bucket('examplebucket')
# Atur key ke jalur lengkap objek. Jalur lengkap tidak boleh mengandung nama bucket. Contohnya: exampledir/example.zip.
# Atur file ke jalur lengkap file lokal. Contohnya: /tmp/example.zip.
bucket.resumable_download('exampledir/example.zip', '/tmp/example.zip') do |p|
puts "Progress: #{p}"
end
bucket.resumable_download(
'exampledir/example.zip', '/tmp/example.zip',
# Atur cpt_file ke jalur file yang mencatat informasi breakpoint.
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}Referensi
Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk unduhan yang dapat dilanjutkan, lihat GetObject.