サイズの大きいファイルをダウンロードする際、不安定なネットワークやプログラムの例外が原因で失敗することがあります。複数回再試行してもダウンロードが失敗することもあります。この問題を解決するため、Object Storage Service (OSS) は再開可能なダウンロード機能を提供しています。再開可能なダウンロード機能は、ファイルを複数のパートに分割し、各パートを個別にダウンロードしてから、それらを結合して完全なファイルにします。
実装方法
Bucket#resumable_download メソッドを使用して、再開可能なダウンロードを実行できます。このメソッドは、次のパラメーターを使用します:
パラメーター | 説明 | 必須 | デフォルト値 |
key | OSS ファイルの完全なパス。 説明 ダウンロードするファイルの ETag 値が変更されると、ダウンロードは失敗します。 | はい | なし |
file | ダウンロードを保存するローカルファイルの完全なパス。 | はい | なし |
:cpt_file | ブレークポイント情報を記録するファイル。このファイルに対する書き込み権限が必要です。 説明
| いいえ | ローカルファイルと同じフォルダにある |
:disable_cpt | ダウンロードの進捗状況を記録するかどうかを指定します。有効な値は次のとおりです:
| いいえ | false |
:part_size | 各シャードのサイズ。 | いいえ | 10 MB |
&block | 呼び出し中にブロックが渡された場合、ダウンロードの進捗状況はそのブロックによって処理されます。 | いいえ | なし |
詳細については、API ドキュメントをご参照ください。
サンプルコード
次のコードは、再開可能なダウンロードを実行する方法の例を示しています。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# 中国 (杭州) のエンドポイントを例として使用します。実際のエンドポイントを指定してください。
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']
)
# バケット名を指定します (例: examplebucket)。
bucket = client.get_bucket('examplebucket')
# key にはオブジェクトの完全なパスを設定します。完全なパスにバケット名を含めることはできません。例: 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」をご参照ください。