2010-02-25 50 views
4

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

我使用fastercsv宝石,这里是供参考

在我的控制我的一些控制器代码:

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 

回答

4

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

+0

噢好的....是没有办法将图片包含进去? – palani 2010-02-25 11:22:13

+0

找出读者可以采取什么,然后使用它。 – 2010-02-25 11:23:47

+0

噢,好的,谢谢你的帮助 – palani 2010-02-25 11:26:19

1

你可以尝试添加

  • 链接到图像文件
  • 一行base64编码字符串
+2

我应该怎么做...你可以给更具体的 – palani 2010-02-25 11:25:04

+0

使用file://./images/myimage001.jpg不适用于任何工作表。有没有一种标准的方式来创建文件夹/图像的文件链接? – RyanNerd 2016-04-15 00:33:54

1

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

11

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

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

如果您将配置文件照片导出为一组PNG,并将每个记录的文件名保存在CSV文件中,您会好得多。

0

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

相关问题