StackedCrooked
StackedCrooked

Reputation: 35485

Best practices for handling binary data in Ruby?

What are the best practices for reading and writing binary data in Ruby?

In the code sample below I needed to send a binary file using over HTTP (as POST data):

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

While this code seems to do a good job, it probably isn't very idiomatic. How can I improve it?

Upvotes: 3

Views: 862

Answers (1)

Jonas Elfstr&#246;m
Jonas Elfstr&#246;m

Reputation: 31428

Then FileUtils copy_stream might be of use.

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

Maybe not exactly what you asked for but if it's the whole HTTP POST files issue you want to solve then HTTPClient can do it for you:

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

Also I've heard that Nick Siegers multipart-post is good but I haven't used it.

Upvotes: 3

Related Questions