3

Ruby 用の Amazon S3 API は、ブロックを read メソッドに渡すときにオブジェクトのみをストリーミングします。em-ftpd 用のドライバーを開発していますが、S3 データをクライアントにストリーミングするには IOish オブジェクトが必要です。単純に myS3Object.read を渡すと、S3 API で規定されているように、ファイル全体がメモリにロードされます。それをカスタム IO クラスのようなものにカプセル化して、ストリームを em-ftpd に渡す方法はありますか?

これが私のコードです:

def get_file(path)
  #loading whole file into memory - not efficient
  yield bucket.objects[path].read
end

これは、ブロックを使用してデータ チャンクを取得する、できれば IOish オブジェクトとして、コードの結果を取得する em-ftpd 内のコードです。

# send a file to the client
def cmd_retr(param)
  send_unauthorised and return unless logged_in?
  send_param_required and return if param.nil?

  path = build_path(param)

  @driver.get_file(path) do |data|
    if data
      send_response "150 Data transfer starting #{data.size} bytes"
      send_outofband_data(data)
    else
      send_response "551 file not available"
    end
  end
end

ありがとうございました。

4

1 に答える 1

1

S3 データのバッファとメソッド read および eof? を持つクラスを作成する必要があることがわかりました。

于 2012-10-25T04:42:50.543 に答える