【问题标题】:Rails Paperclip skip upload if image is already present如果图像已经存在,Rails Paperclip 跳过上传
【发布时间】:2014-03-02 18:45:18
【问题描述】:

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

Rails 3.2.12
回形针 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' }

【问题讨论】:

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


    【解决方案1】:

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

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

    我能找到的最佳替代方案(无需分叉并尝试对 Paperclip 进行猴子补丁)是将附加文件的处理转移到后台作业,例如 Resque。这将减轻您担心的时间部分。至于资源,S3 相当便宜——我的 S3 实例拥有数十万张图片,价格从来没有超过 0.15 美元,但它是一个没有太多流量的网站。

    【讨论】:

    • 是的,我更担心在导入时节省时间并且没有 15000 个相同的图像。
    • 我听到了。但将其转移到 Resque 之类的地方会使这种影响不那么明显。
    • 如果我在保存之前从进程中删除实际图像并使用文件中的字段手动更新数据库会怎样。这行得通吗?
    • 如果我按照你说的正确,那可能工作,但前提是Paperclip尊重像update_column这样绕过回调的调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2011-03-14
    • 2015-03-10
    • 2016-07-30
    相关资源
    最近更新 更多