ネットワークが不安定な場合やその他の例外が発生した場合、大きなオブジェクトのダウンロードに失敗することがあります。 場合によっては、複数回試行してもオブジェクトのダウンロードに失敗することがあります。 この問題を解決するために、Object Storage Service (OSS) は再開可能なダウンロード機能を提供しています。 再開可能ダウンロードでは、OSSはオブジェクトを複数のパーツに分割し、各パーツを個別にダウンロードします。 すべてのパーツがダウンロードされた後、OSSはパーツを完全なオブジェクトに結合します。
実装方法
再開可能ダウンロードを実装するには、Bucket#resumable_download
メソッドを呼び出します。 メソッドは、以下のパラメータを含む。
パラメーター | 説明 | 必須 | デフォルト値 |
キー | ダウンロードするOSSオブジェクトのフルパス。 説明 ダウンロードするオブジェクトのETag値が変更された場合、ダウンロードは失敗します。 | 必須 | なし |
ファイル | オブジェクトをダウンロードするローカルファイルのフルパス。 | 必須 | なし |
:cpt_file | チェックポイントファイルのパス。 ファイルへの書き込み権限が必要です。 説明
| 任意 | ローカルファイルのディレクトリにある |
:disable_cpt | ダウンロードの進行状況を記録するかどうかを指定します。 有効な値:
| 任意 | 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」をご参照ください。