如何使用XML Builder在XML中嵌入二进制数据?

时间:2013-08-08 10:44:31

标签: ruby-on-rails xml

我正在使用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默认处理它是否足够好?

1 个答案:

答案 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格式解码字符串并获取二进制字符串。

希望它有所帮助。

相关问题