當下載大檔案時,如果網路不穩定或者程式異常退出,會導致下載失敗,甚至重試多次仍無法完成下載。為此,OSS提供了斷點續傳下載功能。斷點續傳下載將需要下載的檔案分成若干個分區分別下載,所有分區都下載完成後,將所有分區合并成完整的檔案。
實現方法
您可以通過Bucket#resumable_download
方法來實現斷點續傳下載。該方法包含以下參數:
參數 | 描述 | 是否必選 | 預設值 |
key | OSS檔案完整路徑。 說明 如果待下載的檔案ETag值發生變化,會導致下載失敗。 | 是 | 無 |
file | 下載到本地檔案的完整路徑。 | 是 | 無 |
:cpt_file | 指定用於記錄斷點資訊的檔案,您需要對該檔案有寫入許可權。 說明
| 否 | 本地檔案同目錄下的 |
:disable_cpt | 下載過程中是否記錄下載進度。取值如下:
| 否 | false |
:part_size | 指定每個分區的大小。 | 否 | 10 MB |
&block | 調用時傳遞了block,則下載進度會交由block處理。 | 否 | 無 |
更多說明,請參見API文檔。
範例程式碼
以下代碼用於斷點續傳下載。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫Bucket名稱,例如examplebucket。
bucket = client.get_bucket('examplebucket')
# key填寫Object完整路徑,Object完整路徑中不能包含Bucket名稱,例如exampledir/example.zip。
# file填寫本地檔案的完整路徑,例如/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',
# cpt_file填寫用於記錄斷點資訊的檔案路徑。
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}
相關文檔
關於斷點續傳下載的API介面說明,請參見GetObject。