如何将图像包含在CSV中

时间:2010-02-25 11:17:01

标签: ruby-on-rails

在我的Rails应用程序中,管理员可以将用户数据导出为csv格式。我的应用程序中的每个用户都有他们的个人资料照片....我的客户想要将用户照片包含在CSV文件中..我不知道如何做到这一点。任何人都可以帮助我......

我正在使用fastercsv gem,这里有一些我的控制器代码供参考

在我的控制器中:

require 'fastercsv'

def getcsv
  entries = User.find(:all)

 csv_string = FasterCSV.generate do |csv| 

   csv << ["first_name","last_name","username","address","photo" ]

  entries.each do |e|
   csv <<  [e.first_name,e.last_name,e.username,e.address,e.photo.url]
  end
 end

  send_data csv_string,:type=>'text/csv;charset=iso-8859-1; header=present', :filename=>"entries.csv",:disposition => 'attachment'

  end

5 个答案:

答案 0 :(得分:11)

将实际照片保存在CSV文件中在技术上是可行的,但非常不明智。 CSV根本不适用于那种工作。您显然不能简单地将二进制图像数据嵌入到基于ASCII文本的CSV文件中。可以使用Base-64 encoding将8位二进制数据转换为7位文本,然后将其存储在CSV文件的其中一个字段中。 (这也将扩大所需的存储量约20%)。

但是什么软件可以解码这个?您将不得不编写一些其他软件将图像转换回另一端,这将失败目的。此外,CSV文件的每一行都很庞大,可能会导致导入问题。

将个人资料照片导出为一组PNG会更好,并将文件名保存在CSV文件中以对照每个记录。

答案 1 :(得分:4)

CSV是纯文本。除非生成器和阅读器都同意格式,例如base64编码的PNG,否则无法包含图形数据。

答案 2 :(得分:1)

您可以尝试添加

  • 指向图片文件的链接
  • 单行base64编码字符串

答案 3 :(得分:1)

CSV(逗号分隔值)不是适合二进制数据的格式,但是将二进制数据保存到文本文件的一般经验法则是将其转换为适合文本文件的格式,例如Base64,或者十六进制中原始数据的文本表示。

答案 4 :(得分:0)

您是否考虑过使用SVG格式?您应该能够将xml嵌入到csv中。