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