Saat menggunakan unggah yang dapat dilanjutkan untuk mengunggah file ke Object Storage Service (OSS), Anda dapat menentukan file titik pemeriksaan. Jika proses unggah terganggu oleh error jaringan atau crash program, proses tersebut akan dilanjutkan dari posisi yang dicatat dalam file titik pemeriksaan.
Implementasi
Unggah yang dapat dilanjutkan membagi file menjadi beberapa bagian dan mengunggahnya secara terpisah. Setelah semua bagian diunggah, bagian-bagian tersebut digabungkan menjadi satu file utuh.
Anda dapat menggunakan metode Bucket#resumable_upload untuk melakukan unggah yang dapat dilanjutkan. Metode ini mencakup parameter berikut:
Parameter | Deskripsi | Wajib | Nilai default |
key | Jalur lengkap file yang akan diunggah ke OSS. | Ya | Tidak ada |
file | Jalur lengkap file lokal yang akan diunggah. Catatan Jika nilai ETag file lokal berubah selama proses unggah, unggah akan gagal. | Ya | Tidak ada |
:cpt_file | File yang digunakan untuk mencatat informasi titik putus. Anda harus memiliki izin tulis untuk file ini. Catatan
| Tidak | File |
:disable_cpt | Menentukan apakah progres unggah direkam. Nilai yang valid:
| Tidak | false |
:part_size | Ukuran setiap bagian. | Tidak | 4 MB |
&block | Jika sebuah block diberikan saat pemanggilan, progres unggah akan ditangani oleh block tersebut. | Tidak | Tidak ada |
Kode contoh
Kode berikut menunjukkan contoh cara melakukan unggah yang dapat dilanjutkan.
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sebenarnya.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tetapkan nama bucket. Misalnya, examplebucket.
bucket = client.get_bucket('examplebucket')
# Tetapkan key ke jalur lengkap objek. Jalur lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/example.zip.
# Tetapkan file ke jalur lengkap file lokal. Misalnya, /tmp/example.zip.
bucket.resumable_upload('exampledir/example.zip', '/tmp/example.zip') do |p|
puts "Progress: #{p}"
end
bucket.resumable_upload(
'exampledir/example.zip', '/tmp/example.zip',
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}