2010-02-25 5 views
4

Dans mon application Rails, Admin peut exporter les données utilisateur au format csv. Chaque utilisateur dans mon application a sa photo de profil .... mon client veut inclure la photo de l'utilisateur dans le fichier CSV .. Je n'ai pas comment faire cela. peut-on s'il vous plaît aidez-moi ....Comment puis-je inclure une image dans CSV

J'utilise gem fastercsv et voici quelques mon code de contrôleur pour référence

Dans mon contrôleur:

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 

Répondre

4

CSV est le texte brut. Il n'y a aucun moyen d'inclure des données graphiques à moins que le générateur et le lecteur ne s'accordent sur un format, tel que PNG encodé en base64.

+0

Oh ok .... N'y a-t-il aucun moyen d'inclure l'image dans cela? – palani

+0

Déterminez ce que le lecteur peut prendre, puis utilisez-le. –

+0

Oh ok merci pour votre aide – palani

1

Vous pouvez essayer d'ajouter

  • liens vers des fichiers d'image
  • base64 ligne simple chaîne codée
+2

Comment dois-je faire cela ... pouvez-vous s'il vous plaît donner plus spécifique – palani

+0

en utilisant le fichier: //./images/myimage001.jpg ne fonctionne pas sur les feuilles de calcul. Existe-t-il un moyen standard de créer un lien de fichier vers un dossier/une image? – RyanNerd

1

CSV (valeurs séparées par des virgules) n'est pas un format approprié pour les données binaires, la règle générale Cependant, pour enregistrer des données binaires dans un fichier texte, vous devez le convertir en un format compatible avec les fichiers texte, comme Base64, ou une représentation textuelle des données brutes dans Hex.

11

L'enregistrement de la photo dans un fichier CSV est techniquement possible, mais très mal conseillé. CSV n'est tout simplement pas destiné à ce genre de travail. Vous ne pouvez évidemment pas simplement intégrer les données d'image binaire dans le fichier CSV basé sur le texte ASCII. Il est possible d'utiliser Base-64 encoding pour convertir les données binaires de 8 bits en texte 7 bits, puis de les stocker dans l'un des champs de votre fichier CSV. (Ceci augmentera également le stockage requis d'environ 20%).

Mais alors quel logiciel pourrait décoder cela? Vous auriez à écrire un autre logiciel pour convertir les images à l'autre extrémité, ce qui irait à l'encontre du but. De plus, chaque ligne du fichier CSV serait massive et causerait probablement des problèmes lors de l'importation.

Il vaudrait mieux exporter les photos de profil sous la forme d'un ensemble de fichiers PNG, et enregistrer le nom de fichier dans le fichier CSV pour chaque enregistrement.

0

Avez-vous envisagé d'utiliser le format SVG? Vous devriez être capable d'intégrer le xml dans le csv.

Questions connexes