7

我需要对不是图像的文件上传进行一些后期处理——在回形针中我可以有一个自定义的后处理器,但我在carrierwave中找不到任何方法来做到这一点。

Ruby 1.9.3、Rails 3.2.7 和 CarrierWave 0.6.2。

4

2 回答 2

8

OP 的问题是如何处理不是图像的文件。

请查看 GitHub 上的源文件: carrierwave/lib/carrierwave/uploader/processing.rb 并查看评论。

您将创建自己的 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 允许您调用read任何 Uploader 实例(= 上传文件的任何实例),它将读取该文件。

另一个提示:

有时您需要在上传文件的上传器中访问 ActiveRecord 模型。

只需在您的上传程序代码中访问它,如下所示:

      self.model

这使您可以直接在您的 AR 模型中存储有关上传文件的其他信息,例如格式。

于 2015-01-04T19:06:36.737 回答
2

我写了一篇关于如何创建自定义后处理器来创建视频缩略图的博客文章,也许你会发现它很有用。

https://prograils.com/posts/video-encoding-processor-for-carrierwave/

于 2012-08-10T09:18:59.283 回答