我正在使用CarrierWave,我想验证文件名,并且仅在扩展名为.gif
, .png
, .jpg
,或没有文件扩展.jpeg
名的情况下才允许文件上传。
有时用户上传没有扩展名的文件。例如:
http://t2.gstatic.com/images?q=tbn:ANd9GcTCD2TLvYI8a4ChgBaYK_JaRfedvXLr3HXQfj0arXXAii3o2yjf
我知道在 中取消注释以下行的可能性uploaders/image_uploader.rb
,但我不知道另外说“仅当存在文件扩展名时才允许任何这些扩展名”的方式。
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
#def extension_white_list
# %w(gif jpg jpeg png)
#end
同样,在我的模型中,我进行了如下验证,但由于某种原因bad-extension.bad
通过了。
validates :image, allow_blank: true, format: {
with: %r{\.(gif|jpe?g|png)\z}i,
message: 'must be a GIF, JPG, or PNG'
}, if: :filename_has_extension?
def filename_has_extension?
image =~ /\./
end