すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Resumable download (Ruby SDK)

最終更新日:Nov 30, 2025

サイズの大きいファイルをダウンロードする際、不安定なネットワークやプログラムの例外が原因で失敗することがあります。複数回再試行してもダウンロードが失敗することもあります。この問題を解決するため、Object Storage Service (OSS) は再開可能なダウンロード機能を提供しています。再開可能なダウンロード機能は、ファイルを複数のパートに分割し、各パートを個別にダウンロードしてから、それらを結合して完全なファイルにします。

実装方法

Bucket#resumable_download メソッドを使用して、再開可能なダウンロードを実行できます。このメソッドは、次のパラメーターを使用します:

パラメーター

説明

必須

デフォルト値

key

OSS ファイルの完全なパス。

説明

ダウンロードするファイルの ETag 値が変更されると、ダウンロードは失敗します。

はい

なし

file

ダウンロードを保存するローカルファイルの完全なパス。

はい

なし

:cpt_file

ブレークポイント情報を記録するファイル。このファイルに対する書き込み権限が必要です。

説明
  • ダウンロードの進捗状況は .cpt ファイルに記録されます。ダウンロードされたシャードは file.part.N として保存されます。シャードのダウンロードが失敗した場合、次回のダウンロード試行は .cpt ファイルに記録されたブレークポイントから再開されます。Bucket#resumable_download を再度呼び出す場合は、前回の試行と同じ .cpt ファイルを指定してください。ファイルのダウンロードが完了すると、パートファイルと .cpt ファイルは削除されます。

  • .cpt ファイルはダウンロードの中間状態を記録し、検証機能も含まれています。.cpt ファイルを編集しないでください。.cpt ファイルが破損している場合、ダウンロードを再開することはできません。

いいえ

ローカルファイルと同じフォルダにある file.cpt です。ここで、file はローカルファイルの名前です。

:disable_cpt

ダウンロードの進捗状況を記録するかどうかを指定します。有効な値は次のとおりです:

  • true: ダウンロードの進捗状況は記録されません。失敗した場合、ダウンロードを再開することはできません。

  • false: ダウンロードの進捗状況は記録されます。失敗した場合、ブレークポイントからダウンロードを再開できます。

いいえ

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」をご参照ください。