获取 S3 对象的下载流并将其传递给 ruby 中的另一个方法



Amazon S3 API for Ruby 仅在将块传递给 read 方法时流式传输对象。我正在为 em-ftpd 开发一个驱动程序,它需要一个 IOish 对象将 S3 数据流式传输到客户端。如果只是简单地传递myS3Object.read,整个文件就会加载到内存中,如S3 API所述。有没有办法将其封装到自定义 IO 类之类的东西中,以便我可以将流传递给 em-ftpd?

这是我的代码:

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

下面是 em-ftpd 中的代码,它使用块获取其数据块来获取我的代码的结果,最好是作为 IOish 对象:

# 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

谢谢。

事实证明,我需要创建一个带有 S3 数据缓冲区以及读取和 eof 方法的类。

相关内容

  • 没有找到相关文章

最新更新