2013-08-08 3 views
0

XML Builder gem을 사용하여 하나의 앱에서 다른 앱으로 XML 데이터를 전달합니다. 이제 바이너리 데이터 (데이터베이스에 저장된 PDF 문서)를 보내는 데 동일한 채널을 사용하고 싶습니다.XML 작성기를 사용하여 XML에 바이너리 데이터를 포함하는 방법은 무엇입니까?

@invoice = Invoice.first(:conditions => ['has_scanned = ?', 'Y']) 

invoice.xml.builder보기 :

xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" 
xml.invoice(:invoice_no => @invoice.number, :pdf => @invoice.attachment) 

내가 :pdf 데이터를 인코딩하기 위해 필요하거나 Builder이 기본적으로 충분 처리합니까 컨트롤러는 뭔가처럼?

답변

2

가 나는 XML에 대한 몇 가지 잘못된 문자가 있습니다 때문에, 바이너리 스트림으로 뭔가를 할 필요가 있다고 생각. 여기

는 언어 독립적, 단지 XML의, 문서에 대한 handle binary data in xml입니다. 이 경우

, 나는 64 기수를 사용하여 첨부 파일을 처리 할 수있는 쉬운 방법을 생각한다. 당신이 XML을 읽을 때

xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" 
xml.invoice(:invoice_no => @invoice.number) do 
    xml.pdf Base64.encode64(@invoice.attachment) 
end 

는 base64로 포맷 문자열을 디코딩하고 이진 문자열을 얻을 : @invoice.attachment가 진 스트링 인 경우 은하지 않을 경우, 그것을 얻을, 아래의 코드를 사용합니다.

은 도움 바랍니다.

관련 문제