使用Rails和Paperclip导入旧数据

Zak*_*Zak 9 import ruby-on-rails paperclip

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

有没有正确的方法来做到这一点?这似乎应该是相当容易的事情.

Ben*_*Ben 16

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

thing.image = File.new("/path/to/file.png")
thing.save
Run Code Online (Sandbox Code Playgroud)


Fra*_*ois 14

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

thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save
Run Code Online (Sandbox Code Playgroud)

如果文件很小(比如小于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
Run Code Online (Sandbox Code Playgroud)