Question

J'utilise des pièces jointes dans paperclip ma demande. J'écris un script d'importation pour un tas de données anciennes, mais je ne sais pas comment créer des objets à partir de fichiers Paperclip sur le disque. Ma première hypothèse est de créer des objets mock CGI multipart, mais qui semble un peu d'une solution brute, et ma première tentative a échoué, je pense parce que je n'ai pas la méthode to_tempfile droit.

Y at-il une bonne façon de le faire? Il semble que quelque chose qui devrait être assez facile.

Était-ce utile?

La solution

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

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

Autres conseils

Cela fonctionne très bien pour les fichiers locaux, mais il ne fonctionne pas aussi bien pour les fichiers distants. J'ai une application qui utilise pour le téléchargement des images paperclip. Ces images sont stockées sur s3 se amazon. 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 que d'environ 10 km, puis openURI retourne 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

Je suis en mesure de 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top