使用单个上传器处理多种文件类型时如何验证上传文件的扩展名?
我正在使用单个模型,即包含属性文件的 Asset。上传器安装在文件属性上。资产模型还有一个名为 feature_id 的属性。feature_id 指的是视频、音频等特征。
那么,我应该如何根据 feature_id 值验证具有多个扩展名白名单的文件类型?
使用 ruby 1.9 和 rails 3.2.11
任何帮助将不胜感激。
使用单个上传器处理多种文件类型时如何验证上传文件的扩展名?
我正在使用单个模型,即包含属性文件的 Asset。上传器安装在文件属性上。资产模型还有一个名为 feature_id 的属性。feature_id 指的是视频、音频等特征。
那么,我应该如何根据 feature_id 值验证具有多个扩展名白名单的文件类型?
使用 ruby 1.9 和 rails 3.2.11
任何帮助将不胜感激。
尽管答案已被接受,但我对此有更好的方法。试试这个代码。
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
允许您上传音频文件。
希望它能回答这个问题。您可以为其他类型的文件添加更多检查。
在您的上传器中定义您的白名单,如carrierwave 的文档中所示。
class MyUploader < CarrierWave::Uploader::Base
def extension_white_list
%w(jpg jpeg gif png)
end
end
我遇到了完全相同的用例:
在Asset.rb 中 验证文件名的格式
validates :asset_file,
format:{
with: %r{\.(pdf|doc|png)$}i, message: "Wrong file format"
}
使用正则表达式来测试文件名:
在这里您可以使用正则表达式: http ://rubular.com/r/Z3roRDDXAf
希望这可以帮助!