从PostgreSQL bytea转义下载文件

时间:2013-02-16 10:31:51

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql encoding

我有一些问题允许用户下载文件,该文件存储在PostgreSQL bytea转义字段(http://www.postgresql.org/docs/current/interactive/datatype-binary.html)中。

1.9.3p385 :023 > data = PG::Connection.unescape_bytea(m[:data])
 => "JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAg\r\nUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpzd..."
1.9.3p385 :023 > data.encoding.name
 => "ASCII-8BIT" 
1.9.3p385 :023 > data.bytesize
 => 3878164 

但是当我使用“send_data”或“send_file”和tempfile时,我以无效格式获取文件(这是pdf文件)。它比原版更大,而不是由pdf读者打开。

此字段中的数据是电子邮件的mime部分。如果我从所有这些部分构建原始电子邮件(使用边界作为分隔符),则此电子邮件将包含有效的pdf附件。

如何将此数据转换为字节以允许用户单独下载此文件?

1 个答案:

答案 0 :(得分:0)

请参阅以下内容:http://rubyforge.org/tracker/index.php?func=detail&aid=27845&group_id=234&atid=967

语法类似于PGConn.unescape_bytea($ field);

根据您的pg版本,您可能需要升级该gem