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

Object Storage Service:再開可能ダウンロード

最終更新日:Dec 20, 2023

ネットワークが不安定な場合やその他の例外が発生した場合、大きなオブジェクトのダウンロードに失敗することがあります。 場合によっては、複数回試行してもオブジェクトのダウンロードに失敗することがあります。 この問題を解決するために、Object Storage Service (OSS) は再開可能なダウンロード機能を提供しています。 再開可能ダウンロードでは、OSSはオブジェクトを複数のパーツに分割し、各パーツを個別にダウンロードします。 すべてのパーツがダウンロードされた後、OSSはパーツを完全なオブジェクトに結合します。

実装方法

再開可能ダウンロードを実装するには、Bucket#resumable_downloadメソッドを呼び出します。 メソッドは、以下のパラメータを含む。

パラメーター

説明

必須

デフォルト値

キー

ダウンロードするOSSオブジェクトのフルパス。

説明

ダウンロードするオブジェクトのETag値が変更された場合、ダウンロードは失敗します。

必須

なし

ファイル

オブジェクトをダウンロードするローカルファイルのフルパス。

必須

なし

:cpt_file

チェックポイントファイルのパス。 ファイルへの書き込み権限が必要です。

説明
  • ダウンロードの進行状況に関する情報は、に記録されます。cptファイル。 ダウンロードしたパーツはfile.part.Nとして保存されます。 パーツのダウンロードに失敗した場合は、に記録された位置からダウンロードが再開されます。cptファイル。 同じものを指定する必要があります。最後にBucket#resumable_downloadを再度呼び出したときのcptファイル。 オブジェクトがダウンロードされた後、パーツと cptファイルを削除します。

  • . cptファイルは、ダウンロードの中間ステータス情報を記録し、ダウンロードしたデータを検証するために使用できます。 を編集できません。cptファイル。 の場合。cptファイルが破損し、ダウンロードを続行できません。

任意

ローカルファイルのディレクトリにあるfile.cptfileはローカルファイルの名前を示します。

:disable_cpt

ダウンロードの進行状況を記録するかどうかを指定します。 有効な値:

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

  • false: ダウンロードの進行状況を記録します。 ダウンロードが失敗した場合、チェックポイントファイルに記録された位置からダウンロードが再開されます。

任意

false

:part_size

各部分のサイズ。

任意

10 MB

&ブロック

ダウンロードの進行状況をブロック単位で処理するかどうかを指定します。 Bucket#resumable_downloadを呼び出したときにブロックを渡すと、ダウンロードの進行状況はブロック単位で処理されます。

なし

詳細については、「Alibaba Cloud OSS SDK For Ruby」をご参照ください。

サンプルコード

次のコードは、再開可能なダウンロードを実行する方法の例を示しています。

'aliyun/oss 'が必要です

client = Aliyun::OSS::Client.new (
  # この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
  エンドポイント: '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')
# キーをオブジェクトのフルパスに設定します。 バケット名をフルパスに含めないでください。 例: exampledir/example.zip. 
# ファイルをローカルファイルのフルパスに設定します。 例: /tmp/example.zip。 
bucket.resumable_download('exampledir/example.zip ', '/tmp/example.zip ') do | p |
  「進捗状況: #{p} 」を置きます
終了

bucket.resumable_download (
  'exampledir/example.zip '、'/tmp/example.zip '、
  # cpt_fileをチェックポイントファイルのパスに設定します。 
  : part_size => 100*1024, :cpt_file => '/tmp/example.zip.cpt') { | p |
  「進捗状況: #{p} 」を置きます
} 

参考資料

再開可能ダウンロードを実行するために呼び出すことができるAPI操作の詳細については、「GetObject」をご参照ください。