edit-icon download-icon

オブジェクトをダウンロードする

最終更新日: Aug 25, 2017

OSS Ruby SDKは、オブジェクトをダウンロードするための豊富なインターフェースを提供します。 OSSからオブジェクトをダウンロードするには、次のいずれかの方法を使用します。

  • Download to a local file
  • Stream download
  • Resumable download
  • HTTP download (via a browser)

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

次のコードでは、オブジェクトをローカルファイルとしてダウンロードするために指定された:file パラメータでBucket#get_objectインタフェースを使用しています

  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. bucket.get_object('my-object', :file => 'local-file')

ストリームダウンロード

大きなファイルをアップロードする際には、すべてのコンテンツを一度に処理してアップロードするのではなく、ストリーミング形式でファイルをアップロードする必要があります。コンテンツの一部を一度にアップロードしたいと考えています。次のコードは、Bucket#get_objectインターフェースを使用して、ダウンロードされたコンテンツをストリーミングで処理するために指定された blockパラメータを使用します。

  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. bucket.get_object('my-object') do |chunk|
  7. # handle_data(chunk)
  8. puts "Got a chunk, size: #{chunk.size}."
  9. end

再開可能なダウンロード

大きなオブジェクトがダウンロードされているときにネットワークジッタまたはプログラムがクラッシュすると、ダウンロード操作全体が失敗します。オブジェクトを再ダウンロードして、リソースを無駄にする必要があります。ネットワークが不安定な場合は、複数回再試行する必要があります。Bucket#resumable_downloadインターフェースは、再開可能なダウンロードを実現するために使用できます。インタフェースには次のパラメータがあります。

  • key: ダウンロードするオブジェクトの名前。
  • file: ダウンロードしたオブジェクトへのローカルパス。
  • opts: オプションのパラメータ。主に以下を含みます。
    • :cpt_file: チェックポイントファイルのパス。指定しない場合、チェックポイントオブジェクトのパスは、デフォルトでは、ローカルファイルの同じディレクトリの下にあるfile.cptになります。file はローカルファイルの名前です。
    • :このパラメータをtrueに設定すると、ダウンロード中にダウンロードの進行状況が記録されず、アップロードが失敗した場合に再開可能なアップロードが実行されません。
    • :part_size: 各partのサイズ。デフォルトのサイズは10 MBです。
    • &block: Bucket#resumable_download インターフェイスが呼び出されたときにブロック関数がインポートされた場合、ダウンロードの進行状況はブロック関数によって処理されます。

パラメータの詳細については、 API Documentationを参照してください。

原則は、ダウンロードするオブジェクトを複数のpartsに分割して個別にダウンロードすることです。すべてのpartsがダウンロードされると、オブジェクト全体のダウンロードが完了します。現在のダウンロードタスクおよびダウンロードされたpartsの進行状況が記録され(チェックポイントファイルに記録されます)、ダウンロードされたparts(file.part.Nとして保存されます。そのうち、file はローカルパスにダウンロードされたオブジェクトの名前です)。 1つの部分がダウンロードされなければ、checkpointオブジェクトの記録された位置から再ダウンロードが開始されます。これには、前のダウンロードと同じcheckpointオブジェクトを次の呼び出しで使用する必要があります。ダウンロードが完了すると、file.part.Nファイルとチェックポイントオブジェクトが削除されます。

  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. bucket.resumable_download('my-object', 'local-file') do |p|
  7. puts "Progress: #{p}"
  8. end
  9. bucket.resumable_download(
  10. 'my-object', 'local-file',
  11. :part_size => 100 * 1024, :cpt_file => '/tmp/x.cpt') { |p|
  12. puts "Progress: #{p}"
  13. }

注意:

  • SDKはダウンロード中間状態をcptオブジェクトに記録します。したがって、cptオブジェクトに対する書き込み権限があることを確認してください。
  • SDKは、ダウンロードしたパーツをfile.part.Nファイルとして保存します。したがって、file.part.Nファイルが格納されているディレクトリに対して、ファイル作成権限があることを確認してください。
  • cptオブジェクトはダウンロードの中間状態情報を記録し、自己チェック機能を持っています。オブジェクトを編集することはできません。 cptオブジェクトが破損している場合、ダウンロードは失敗します。
  • ダウンロード中にダウンロードするオブジェクトが変更された場合(ETagが変更された場合)、またはpartがないか変更された場合、エラーが報告されます。

HTTP ダウンロード

OSSに格納されたオブジェクトは、SDKを使用せずにHTTP経由で直接ダウンロードできます。 HTTPダウンロードは、ブラウザやコマンドラインインターフェイス(CLI)ツール( wgetcurlなど)をサポートしています。ダウンロードするオブジェクトのURLSDKによって生成されます。Bucket#object_urlメソッドは、以下のパラメータをサポートするHTTPダウンロードアドレスを生成するために使用されます。

  • key: ダウンロードするオブジェクトの名前。
  • sign: 署名付きURLを生成するかどうか。 public-readまたはpublic-read-writeパーミッションを持つオブジェクトは、署名されたURLなしでアクセスできます。プライベートアクセス権を持つオブジェクトには、署名されたURLでアクセスする必要があります。
  • expiry: URLの有効期間。デフォルト値は60秒です。
  1. require 'aliyun/oss'
  2. client = Aliyun::OSS::Client.new(
  3. endpoint: 'endpoint',
  4. access_key_id: 'AccessKeyId', access_key_secret: 'AccessKeySecret')
  5. bucket = client.get_bucket('my-bucket')
  6. # Generate a URL. By default, the generated URL is a signed URL valid for 60 seconds.
  7. puts bucket.object_url('my-object')
  8. # http://my-bucket.oss-cn-hangzhou.aliyuncs.com/my-object?Expires=1448349966&OSSAccessKeyId=5viOHfldyK6K72ht&Signature=aM2HpBLeMq1aec6JCd7BBAKYiwI%3D
  9. # Generate an unsigned URL
  10. puts bucket.object_url('my-object', false)
  11. # http://my-bucket.oss-cn-hangzhou.aliyuncs.com/my-object
  12. # Set the URL validity period to one hour (3,600 seconds)
  13. puts bucket.object_url('my-object', true, 3600)