【发布时间】:2012-08-07 19:17:29
【问题描述】:
我需要对不是图像的文件上传进行一些后期处理 - 在回形针中我可以有一个自定义的后处理器,但我在carrierwave中找不到任何方法。
Ruby 1.9.3、Rails 3.2.7 和 CarrierWave 0.6.2。
【问题讨论】:
标签: ruby-on-rails-3 carrierwave
我需要对不是图像的文件上传进行一些后期处理 - 在回形针中我可以有一个自定义的后处理器,但我在carrierwave中找不到任何方法。
Ruby 1.9.3、Rails 3.2.7 和 CarrierWave 0.6.2。
【问题讨论】:
标签: ruby-on-rails-3 carrierwave
OP 的问题是如何处理不是图像的文件。
请查看 GitHub 上的此源文件: carrierwave/lib/carrierwave/uploader/processing.rb 并检查 cmets。
您将创建自己的 CarrierWave 上传器子类并将其安装在您的模型中,如下所示:
def MyModel < ActiveRecord::Base
# this is where the uploaded file will be available in your model,
# as a `MyUploader` instance:
#
mount_uploader :uploaded_file, MyUploader
...
end
请注意,它安装在 ActiveRecord 属性 :uploaded_file 上。
这意味着当您从模型访问 :uploaded_file 时,您将获得上传的特定文件的 CarrierWave 上传器实例。
您可以在上传器中简单地定义您的处理,如下所示:
class MyUploader < CarrierWave:Uploader::Base
process :my_custom_processing => [param1,param2,param3]
def my_custom_processing(param1,param2,param3)
...
# e.g. you could call a method which is defined elsewhere,
# which operates on a file:
my_nifty_file_processor( self.uploaded_file )
#
# or you could just do this directly:
uploaded_data = self.uploaded_file.read
...
end
end
在my_nifty_file_processor 中,您只需在传入的对象上调用read 即可读取文件。
CarrierWave 允许您在任何 Uploader 实例(= 已上传文件的任何实例)上调用 read,它会读取该文件。
另一个提示:
有时您需要在上传文件的上传器中访问 ActiveRecord 模型。
只需在您的上传器代码中访问它,如下所示:
self.model
这使您可以直接在您的 AR 模型中存储有关上传文件的其他信息,例如格式。
【讨论】:
我写了一篇关于如何创建自定义后处理器来创建视频缩略图的博文,也许你会发现它很有用。
https://prograils.com/posts/video-encoding-processor-for-carrierwave/
【讨论】: