【问题标题】:Paperclip Processor Operate on S3回形针处理器在 S3 上运行
【发布时间】:2010-11-16 09:59:56
【问题描述】:

我正在尝试创建与外部 Web 服务集成的自定义 Paperclip::Processor(每当上传新文件时,处理器都会调用 Web 服务)。外部服务需要文件存在于 S3 中,并会自动处理将处理后的版本上传到 S3。

这可以使用自定义Paperclip::Processor 来完成,还是应该使用 ActiveRecord 回调来完成?如果Paperclip::Processor 可以工作,那么触发上传的最佳方式是什么?理想情况下,我想做一个处理器,但要求是原始文件必须首先上传到 S3。我看过使用after_create 调用,但有时它似乎与回形针中使用的after_create 冲突。谢谢。

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案1】:

    您可以这样做来创建文件的本地副本。如果它在 S3 上,它将被下载。

    tmp_file = @model.attached_file.to_file => TempFile<...>
    

    然后您可以对这个 TempFile 进行操作。当你不这样做时:

    @model.attached_file = tmp_file
    @model.save
    

    编辑:误读了您的问题。您可以使用before_post_processafter_post_process 挂钩在处理文件之前或之后执行任务。

    class Model < AR::Base
      has_attached_file :avatar
    
      after_post_process :ping_webservice
    
      private
    
      def ping_webservice
        # Do your magic here.
      end
    end
    

    【讨论】:

    • 嗨,阿里扬。感谢您的回复,但after_post_process 挂钩发生在文件上传到 S3 之前,因此这不起作用。
    • 然后使用after_save 并检查头像网址是否存在。
    • 谢谢加勒特。您知道强制最后执行特定after_save 的方法吗?我查看了回形针文档,发现它也使用了after_save 回调,所以有时文件不会在 S3 中。
    • 好的,我现在正在修改回形针。想不通!
    【解决方案2】:

    我最近处理了一个类似的问题,它与 after_save 回调有关。在我定义了 after_save 之后,我设法通过定义回形针(has_attached_file ...)来解决我的问题。这样,回形针的回调将在我之后触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 2014-03-01
      • 2011-05-30
      • 2018-04-08
      • 2011-07-31
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多