2009-12-07 5 views
9

J'utilise un trombone pour les pièces jointes dans mon application. J'écris un script d'importation pour un tas de données anciennes, mais je ne sais pas comment créer des objets paperclip à partir de fichiers sur le disque. Ma première supposition est de créer des objets multi-parties CGI, mais cela semble être une solution grossière, et ma tentative initiale a échoué, je pense que je n'ai pas obtenu la bonne méthode to_tempfile.Importation d'anciennes données avec Rails et Paperclip

Existe-t-il une bonne façon de procéder? Cela semble être quelque chose qui devrait être assez facile.

Répondre

16

Je sais que j'ai fait la même chose, et je crois que je viens de créer un objet File à partir du chemin de chaque fichier, et l'ai assigné à l'attribut image. Paperclip fonctionnera sur ce fichier:

thing.image = File.new("/path/to/file.png") 
thing.save 
+1

Note à moi, essayez la chose la plus simple qui pourrait éventuellement fonctionner la prochaine fois. – Zak

+0

Je me souviens d'être aussi surpris que vous. – Ben

+0

Ouais - cela rock absolument –

14

Ceci fonctionne très bien pour les fichiers locaux mais ne fonctionne pas aussi bien pour les fichiers distants. J'ai une application qui utilise un trombone pour télécharger des images. Ces images sont stockées sur amazon s3. Quoi qu'il en soit, j'ai eu quelques anciennes données que je devais importer donc j'essayé ce qui suit:

thing.image = open('http://www.someurl.com/path/to/image.jpg') 
thing.save 

Si le fichier est petit (par exemple, moins de 10 km) puis openURI retourne un objet StringIO et mon fichier obtiendriez stocké sur s3 comme stringio.txt

Si le fichier est plus grand qu'environ 10K, openuri renvoie un objet TempFile. Mais le nom de fichier sur s3 finit par être unique, mais pas vraiment trait au nom du fichier original de image.jpg

j'ai pu résoudre le problème en procédant comme suit:

remote_photo = open('http://www.someurl.com/path/to/image.jpg') 
def remote_photo.original_filename;base_uri.path.split('/').last; end 
thing.image = remote_photo 
thing.save 
+0

+1 Wow .. vous avez fait ma journée .. – bragboy

+0

Thx. pour 'original_filename' :) –

Questions connexes