2010-04-16 3 views
3

Каковы наилучшие методы чтения и записи двоичных данных в Ruby?Рекомендации по обработке двоичных данных в 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 

Хотя этот код, кажется, делает хорошую работу, это, вероятно, не очень идиоматических. Как я могу улучшить его?

ответ

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') } 

Кроме того, я слышал, что Ник Siegers multipart-post хорош, но я не использовал его.

+0

Я добавил дополнительный код к образцу кода. Как вы можете видеть, мне нужно использовать объект ввода-вывода, предоставляемый фреймворком Mongrel, поэтому я не могу просто использовать HTTPClient.post. – StackedCrooked

+1

При открытии двоичных файлов вы всегда должны добавлять «двоичный» модификатор ('b') к файловому моменту. Итак, выше вы должны иметь 'File.new ('svarttag.jpg', 'rb')' и 'File.new ('blacktrain.jpg', 'wb')'. –

Смежные вопросы