我正在使用XML Builder
gem将XML数据从一个应用程序传送到另一个应用程序。现在我们想使用相同的通道发送二进制数据(存储在数据库中的PDF文档)。控制器类似于:
@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
默认处理它是否足够好?
答案 0 :(得分:3)
我认为你需要对二进制流做一些事情,因为它有一些无效的XML字符。
这是一个关于handle binary data in xml的文档,它与语言无关,只是xml。
在这种情况下,我认为处理附件的最简单方法是使用base64。
如果@invoice.attachment
是二进制字符串,请使用下面的代码,如果没有,请获取它:
xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"
xml.invoice(:invoice_no => @invoice.number) do
xml.pdf Base64.encode64(@invoice.attachment)
end
当你读取xml时,用base64格式解码字符串并获取二进制字符串。
希望它有所帮助。