再開可能なアップロードを使用して Object Storage Service (OSS) にファイルをアップロードする場合、チェックポイントファイルを指定できます。ネットワークエラーやプログラムのクラッシュによってアップロードが中断された場合、プロセスはチェックポイントファイルに記録された位置から再開されます。
仕組み
再開可能なアップロードでは、ファイルを複数のパートに分割して個別にアップロードします。すべてのパートがアップロードされると、それらがマージされて完全なファイルが形成されます。
再開可能なアップロードを実行するには、Bucket#resumable_upload メソッドを使用します。このメソッドには、次のパラメーターが含まれます:
パラメーター | 説明 | 必須 | デフォルト値 |
key | OSS にアップロードするファイルの完全なパス。 | はい | なし |
file | アップロードするローカルファイルの完全なパス。 説明 アップロード中にローカルファイルの ETag 値が変更されると、アップロードは失敗します。 | はい | なし |
:cpt_file | ブレークポイント情報を記録するために使用されるファイル。このファイルへの書き込み権限が必要です。 説明
| いいえ | ローカルファイルと同じディレクトリにある |
:disable_cpt | アップロードの進捗を記録するかどうかを指定します。有効な値:
| いいえ | false |
:part_size | 各パートのサイズ。 | いいえ | 4 MB |
&block | 呼び出し中にブロックが渡された場合、アップロードの進捗はそのブロックによって処理されます。 | いいえ | なし |
サンプルコード
次のコードは、再開可能なアップロードを実行する方法の例を示しています。
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_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}"
}