如果图像已经存在,则Rails Paperclip跳过上传

时间:2014-02-06 01:48:27

标签: ruby-on-rails ruby ruby-on-rails-3 amazon-s3 paperclip

我试图导入数千个项目,其中大多数使用相同的图像。我想在上传图像之前检查一下是否存在同名的图像,这样我就可以节省时间和资源。我使用亚马逊s3作为存储。我似乎无法在文档中找到任何关于它的内容。我知道我可以做像image.exists这样的事情吗?但是我在模型中做什么不上传图像但仍然将数据库中的所有内容都设置为指向现有图像。

Rails 3.2.12
Paperclip 3.2.1

validates_attachment_content_type :image, :content_type => ['image/jpeg', 'image/png', 'image/gif', 'image/pjpeg']

has_attached_file :image,
                :storage => :s3,
                :s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
                :path => "images/:attachment/:style/:filename",
                :styles => { :original => '64x64', :small => '32x32' }

1 个答案:

答案 0 :(得分:0)

我之前也遇到过这个问题,但从未完全找到解决方案。我认为这是因为Paperclip的设计,每个记录都需要一个独特的附件。

您可以尝试执行copying an existing attachment to another record之类的操作,但仍会将“已复制”的附件上传到记录中。

我能找到的最好的选择(没有分叉和尝试monkeypatch Paperclip)是将文件附加到后台作业的处理,如Resque。这将卸载您关注的时间部分。至于资源,S3非常便宜 - 我的S3实例从未超过0.15美元,有数十万张图像,但这是一个没有太多流量的网站。