我正在使用 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
最佳答案
那么为什么不在验证过程中使用文件的 Mimetype 比较有 ruby gem call mimetype 可以帮助您完成任务
像这样的东西
AVAILABLE_MIMETYPE = %w(image/gif)
validate :mime_type_of ,:if => :if_changed?
private
def mime_type_of
AVAILABLE::MIMETYPE.include?(MIME::Types.type_for[image_path][0])
end
def if_changed?
new_record? or image_changed?
end
甚至 CarrierWave 包括 MimeType Gem 内部检查是否也有帮助
希望这有帮助
关于ruby-on-rails - 仅当存在文件扩展名时如何验证文件扩展名?重新 : carrierwave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184463/