回形针处理器在S3上运行

时间:2010-11-16 09:59:56

标签: ruby-on-rails paperclip

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

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

2 个答案:

答案 0 :(得分:3)

您可以执行此操作来创建文件的本地副本。如果它在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

答案 1 :(得分:2)

我最近处理了一个类似的问题,它是使用after_save回调。在我定义了after_save之后,我设法通过定义paperclip(has_attached_file ...)来解决我的问题。这样,回形针的回调将在我的后面开火。