通過斷點續傳上傳的方式將檔案上傳到OSS前,您可以指定斷點記錄點。上傳過程中,如果出現網路異常或程式崩潰導致檔案上傳失敗時,將從斷點記錄處繼續上傳未上傳完成的部分。
實現方法
斷點續傳上傳將要上傳的檔案分成若干個分區(Part)分別上傳,所有分區都上傳完成後,將所有分區合并成完整的檔案,完成整個檔案的上傳。
您可以通過Bucket#resumable_upload
方法來實現斷點續傳上傳。該方法包含以下參數:
參數 | 描述 | 是否必選 | 預設值 |
key | 上傳至OSS的檔案完整路徑。 | 是 | 無 |
file | 待上傳的本地檔案完整路徑。 說明 上傳過程中如果本地檔案ETag值發生變化,會導致上傳失敗。 | 是 | 無 |
:cpt_file | 指定用於記錄斷點資訊的檔案,您需要對該檔案有寫入許可權。 說明
| 否 | 本地檔案同目錄下的 |
:disable_cpt | 上傳過程中是否記錄上傳進度。取值如下:
| 否 | 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}"
}