全部產品
Search
文件中心

Object Storage Service:Ruby斷點續傳上傳

更新時間:Feb 28, 2024

通過斷點續傳上傳的方式將檔案上傳到OSS前,您可以指定斷點記錄點。上傳過程中,如果出現網路異常或程式崩潰導致檔案上傳失敗時,將從斷點記錄處繼續上傳未上傳完成的部分。

實現方法

斷點續傳上傳將要上傳的檔案分成若干個分區(Part)分別上傳,所有分區都上傳完成後,將所有分區合并成完整的檔案,完成整個檔案的上傳。

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

參數

描述

是否必選

預設值

key

上傳至OSS的檔案完整路徑。

file

待上傳的本地檔案完整路徑。

說明

上傳過程中如果本地檔案ETag值發生變化,會導致上傳失敗。

:cpt_file

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

說明
  • 如果上傳過程中某一分區上傳失敗,再次上傳時會從.cpt檔案中記錄的斷點繼續上傳。再次調用Bucket#resumable_upload時需指定與上次相同的.cpt檔案。上傳完成後,.cpt檔案被刪除。

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

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

:disable_cpt

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

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

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

false

:part_size

指定每個分區的大小。

4 MB

&block

調用時傳遞了block,則上傳進度會交由block處理。

範例程式碼

以下代碼用於斷點續傳上傳。

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_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}"
}