我正在尝试创建一个与外部Web服务集成的自定义Paperclip::Processor
(处理器将在上传新文件时调用Web服务)。外部服务需要文件存在于S3中,并且将自动将处理后的版本上载到S3。
这可以使用自定义Paperclip::Processor
完成,还是应该使用ActiveRecord回调?如果Paperclip::Processor
可以使用,触发上传的最佳方式是什么?理想情况下,我想做一个处理器,但要求是首先将原始文件必须上传到S3。我已经看过使用after_create
次调用,但它有时似乎与回形针中使用的after_create
冲突。感谢。
答案 0 :(得分:3)
您可以执行此操作来创建文件的本地副本。如果它在S3上,它将被下载。
tmp_file = @model.attached_file.to_file => TempFile<...>
然后,您可以在此TempFile上执行操作。当你不喜欢的时候:
@model.attached_file = tmp_file
@model.save
编辑:误读了您的问题。您可以使用before_post_process
和after_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 ...)来解决我的问题。这样,回形针的回调将在我的后面开火。