CarrierWave使用单个上传器进行多种文件类型验证

时间:2013-01-31 16:31:21

标签: ruby-on-rails-3 carrierwave

如何在为多种文件类型使用单个上传器时验证上传文件的扩展名?

我正在使用单一模型,即包含属性文件的Asset。上传器安装在文件属性上。资产模型还有一个名为feature_id的属性。 feature_id指的是视频,音频等功能

那么,我应该如何根据feature_id值验证具有多个扩展名白名单的文件类型?

使用ruby 1.9和rails 3.2.11

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

在您的上传器中定义您的白名单,如运营商文档中所示。

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

答案 1 :(得分:5)

虽然答案已被接受,但我有更好的方法。试试这段代码。

class MyUploader < CarrierWave::Uploader::Base
  def extension_white_list
    if model.feature_id == 1
      %w(jpg jpeg gif png)
    elsif model.feature_id == 2
      %w(pdf doc docx xls xlsx)
    elsif model.feature_id == 3
      %w(mp3 wav wma ogg)
    end
  end
end

feature_id == 1表示您只想上传图片,feature_id == 2表示只允许上传文档,feature_id == 3只允许您上传音频文件。

希望它能回答这个问题。您可以为其他类型的文件添加更多检查。

答案 2 :(得分:2)

我遇到了完全相同的用例:

Asset.rb 中 验证文件名的格式

validates :asset_file,
                 format:{
                    with: %r{\.(pdf|doc|png)$}i, message: "Wrong file format"
                        }

使用正则表达式测试文件名:

在这里你可以玩正则表达式: http://rubular.com/r/Z3roRDDXAf

希望这有帮助!