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

qni6mghb  于 2023-03-17  发布在  Ruby
关注(0)|答案(1)|浏览(118)

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

谢谢你。

6tqwzwtp

6tqwzwtp1#

我发现我需要创建一个类,其中包含S3数据缓冲区以及read和eof?方法。

相关问题