0

我正在使用XML Buildergem将 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处理得足够好?

4

1 回答 1

3

我认为你需要对二进制流做一些事情,因为它有一些对 XML 无效的字符。

这是一个关于在 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格式,得到二进制字符串。

希望它有所帮助。

于 2013-08-13T01:44:44.353 回答