2014-12-22 1 views
0

Я выкладываю (необработанное) содержание PDF в рубине, используя следующий блоккак писать (http-post) содержание pdf с использованием ruby?

require 'pdf/reader' 
require 'curb' 

reader = PDF::Reader.new('folder/file.pdf') 
raw_string = '' 
reader.pages.each do |page| 
    raw_string = raw_string + page.raw_content.to_s 
end 
c = Curl::Easy.new('http://0.0.0.0:4567/pdf_upload') 
c.http_post(Curl::PostField.content('param1', 'value1'),Curl::PostField.content('param2', 'value2'), c.http_post(Curl::PostField.content('body', raw_string))) 

Внутри реализации API params[:body] кажется пустой все время (хотя puts raw_string подтверждает, что переменные имеют все значения .

Кроме того, есть лучший способ размещения контента PDF?

+0

Если вы подозреваете, что проблема связана с тем, что сервер действительно получает данные, поскольку кажется, что сторона отправки правильная, тогда нам нужно увидеть минимальный пример этой стороны соединения. –

ответ

0

касается того, как вы строите raw_string ...

Вместо того, чтобы:

reader.pages.each do |page| 
    raw_string = raw_string + page.raw_content.to_s 
end 

Вы должны быть в состоянии сделать что-то вроде одного из них:

raw_string = reader.pages.map(&:raw_content).join 
raw_string = reader.pages.map{ |p| p.raw_content.to_s }.join 

Я также рекомендую вам написать свое последнее распространение строки через несколько строк, для наглядности и читаемости:

c.http_post(
    Curl::PostField.content('param1', 'value1'), 
    Curl::PostField.content('param2', 'value2'), 
    c.http_post(Curl::PostField.content('body', raw_string)) 
) 
+0

На самом деле, если он отправляет необработанный файл, нет никакой реальной необходимости даже использовать 'PDF :: Reader' ... он должен просто отправить двоичное содержимое файла ... –