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

Object Storage Service:再開可能なアップロード (Ruby SDK)

最終更新日:Nov 30, 2025

再開可能なアップロードを使用して Object Storage Service (OSS) にファイルをアップロードする場合、チェックポイントファイルを指定できます。ネットワークエラーやプログラムのクラッシュによってアップロードが中断された場合、プロセスはチェックポイントファイルに記録された位置から再開されます。

仕組み

再開可能なアップロードでは、ファイルを複数のパートに分割して個別にアップロードします。すべてのパートがアップロードされると、それらがマージされて完全なファイルが形成されます。

再開可能なアップロードを実行するには、Bucket#resumable_upload メソッドを使用します。このメソッドには、次のパラメーターが含まれます:

パラメーター

説明

必須

デフォルト値

key

OSS にアップロードするファイルの完全なパス。

はい

なし

file

アップロードするローカルファイルの完全なパス。

説明

アップロード中にローカルファイルの ETag 値が変更されると、アップロードは失敗します。

はい

なし

:cpt_file

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

説明
  • パートのアップロードに失敗した場合、次回のアップロード試行は .cpt ファイルに記録されたブレークポイントから再開されます。Bucket#resumable_upload を再度呼び出すときは、同じ .cpt ファイルを指定してください。アップロードが完了すると、.cpt ファイルは削除されます。

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

いいえ

ローカルファイルと同じディレクトリにある file.cpt ファイル。file はローカルファイルの名前を表します。

:disable_cpt

アップロードの進捗を記録するかどうかを指定します。有効な値:

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

  • false:アップロードの進捗が記録されます。アップロードが失敗した場合、ブレークポイントから再開されます。

いいえ

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}"
}