【问题标题】:How can I make a custom carrierwave post processor?如何制作定制的载波后处理器?
【发布时间】:2012-08-07 19:17:29
【问题描述】:

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

Ruby 1.9.3、Rails 3.2.7 和 CarrierWave 0.6.2。

【问题讨论】:

    标签: ruby-on-rails-3 carrierwave


    【解决方案1】:

    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 模型中存储有关上传文件的其他信息,例如格式。

    【讨论】:

    • 谢谢您,我发现您的解释比当前最重要的解释更相关。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2020-08-27
    • 1970-01-01
    • 2016-10-04
    • 2012-10-22
    相关资源
    最近更新 更多