Ruby中处理二进制数据的最佳实践是什么?

3

在Ruby中读写二进制数据的最佳实践是什么?

在下面的代码示例中,我需要通过HTTP发送一个二进制文件(作为POST数据):

class SimpleHandler < Mongrel::HttpHandler
  def process(request, response)
    response.start(200) do |head,out|
      head["Content-Type"] = "application/ocsp-responder"
      f = File.new("resp.der", "r")
      begin
        while true
          out.syswrite(f.sysread(1))
        end
      rescue EOFError => err
        puts "Sent response."
      end
    end
  end
end

这段代码看起来似乎已经很好了,但它可能不是非常符合惯用语法。我该如何改进它?
1个回答

3

如果需要,可以使用FileUtils中的copy_stream函数进行复制。

require 'fileutils'
fin = File.new('svarttag.jpg')
fout = File.new('blacktrain.jpg','w')
FileUtils.copy_stream(fin,fout)
fin.close
fout.close

也许不完全符合您的要求,但如果您想解决整个HTTP POST文件问题,那么HTTPClient可以为您解决:

require 'httpclient'    
HTTPClient.post 'http://nl.netlog.com/test', { :file => File.new('resp.der') }

此外,我听说Nick Siegers的multipart-post很不错,但我没有使用过。

我在示例代码中添加了一些额外的上下文。正如您所看到的,我必须使用Mongrel框架提供的IO对象,因此我不能只使用HTTPClient.post。 - StackedCrooked
1
打开二进制文件时,应始终将“binary”修饰符(b)添加到文件模式中。因此,在上面的代码中,您应该使用 File.new('svarttag.jpg', 'rb')File.new('blacktrain.jpg', 'wb') - Jörg W Mittag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接