2014-12-22 9 views
0

나는 API 구현 params[:body] 내부 다음 블록루비를 사용하여 pdf의 내용을 (http-post) 게시하는 방법은 무엇입니까?

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

를 사용하여 루비에서 PDF의 (원시) 콘텐츠를 게시하려고은 puts raw_string 변수가 모든 값이 있는지 확인하지만 (항상 비어있는 것으로 보인다 또한.

, PDF 내용을 게시 할 수있는 더 나은 방법이 있나요?

+0

서버가 실제로 데이터를 수신하는 것으로 의심되는 경우 게시 측이 올바른 것처럼 보이기 때문에 연결 측면의 최소한의 예를 살펴볼 필요가 있습니다. –

답변

0

raw_string를 구축하고 방법에 대해서 ...

대신에 :

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

나는 또한 선명도와 가독성을 위해, 여러 줄에 걸쳐 마지막 라인 확산을 쓰기 권하고 싶습니다 :

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

당신은 이들 중 하나 같은 것을 할 수 있어야

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

실제로 그가 raw 파일을 보내면, 실제로는 'PDF :: Reader'를 사용할 필요가 없습니다 ... 그는 파일의 바이너리 내용을 보내야합니다 ... –