使用Rails和Paperclip导入旧数据

时间:2009-12-07 23:07:02

标签: ruby-on-rails import paperclip

我在我的应用程序中使用回形针作为附件。我正在为一堆旧数据编写一个导入脚本,但我不知道如何从磁盘上的文件创建paperclip对象。我的第一个猜测是创建模拟CGI多部分对象,但这似乎是一个粗略的解决方案,我的初始尝试失败了,我想因为我没有得到正确的to_tempfile方法。

有没有正确的方法呢?这似乎应该相当容易。

2 个答案:

答案 0 :(得分:16)

我知道我做了同样的事情,我相信我只是从每个文件的路径创建了一个File对象,并将其分配给了image属性。 Paperclip将在该文件上运行:

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

答案 1 :(得分:14)

这适用于本地文件,但它对远程文件也不起作用。我有一个使用回形针上传图片的应用程序。这些图像存储在亚马逊s3上。无论如何,我有一些我需要导入的旧数据,所以我尝试了以下内容:

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

如果文件很小(比如小于10K),那么openuri会返回一个stringio对象,我的文件将作为stringio.txt存储在s3上

如果文件大于10K,则openuri返回TempFile对象。但是s3上的文件名最终是唯一的,但与image.jpg

的原始文件名无关

我能够通过执行以下操作来解决问题:

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