全部產品
Search
文件中心

Object Storage Service:Ruby斷點續傳下載

更新時間:Feb 28, 2024

當下載大檔案時,如果網路不穩定或者程式異常退出,會導致下載失敗,甚至重試多次仍無法完成下載。為此,OSS提供了斷點續傳下載功能。斷點續傳下載將需要下載的檔案分成若干個分區分別下載,所有分區都下載完成後,將所有分區合并成完整的檔案。

實現方法

您可以通過Bucket#resumable_download方法來實現斷點續傳下載。該方法包含以下參數:

參數

描述

是否必選

預設值

key

OSS檔案完整路徑。

說明

如果待下載的檔案ETag值發生變化,會導致下載失敗。

file

下載到本地檔案的完整路徑。

:cpt_file

指定用於記錄斷點資訊的檔案,您需要對該檔案有寫入許可權。

說明
  • 下載過程的進度資訊記錄在.cpt檔案中。已下載的分區將儲存為file.part.N。如果下載過程中某一分區下載失敗,再次下載時會從.cpt檔案中記錄的斷點繼續下載。再次調用Bucket#resumable_download時需指定與上次相同的.cpt檔案。檔案下載完成後,part檔案和.cpt檔案均被刪除。

  • .cpt檔案不僅記錄了下載的中間狀態資訊,還附帶校正功能。.cpt檔案不允許編輯。如果.cpt檔案損壞,則無法繼續下載。

本地檔案同目錄下的file.cpt,其中file表示本地檔案名稱

:disable_cpt

下載過程中是否記錄下載進度。取值如下:

  • true:下載過程中不記錄下載進度,失敗後無法進行續傳。

  • false:下載過程中記錄下載進度,失敗後從斷點記錄處進行續傳。

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