通过排除Rails Paperclip内容类型验证

时间:2016-08-30 01:07:04

标签: ruby-on-rails-4 paperclip

我正在开发一个消息传递系统供我们内部使用,每条消息都可以有附件。所述附件可以是几乎任何类型的文件,但是有些类型的文件我不想允许,例如EXE。

我不想在模型的验证中列出大量已接受的content_types,这些内容远非实用,并且肯定会阻止应该接受的文件,我宁愿简单地指定应该不是的内容类型被接受。

谷歌搜索没有产生任何结果,但我确定其他人之前遇到过这种情况,是否有任何想法如何最好地解决这个问题?

2 个答案:

答案 0 :(得分:1)

所以这就是我最终做的事情:

has_mongoid_attached_file :file

do_not_validate_attachment_file_type :file
validate :excluded_content_type

def excluded_content_type
  forbidden = [
    "application/x-msdownload",
    "application/x-ms-installer",
    "application/x-elf",
    "application/x-sh",
    "application/x-shellscript",
    "text/x-perl",
    "text/x-python",
    "application/javascript"
  ]
  errors.add(:base, 'Executable and script files are not allowed.') if forbidden.include? file_content_type
end

我不知道这是否是最好的方法,但它有效。如果你有更好的方法可以发布你的答案!

答案 1 :(得分:1)

如果内容类型 不被接受

写在model.rb

  has_attached_file :record_attachment      
  validates_attachment_content_type :record_attachment, presence: false, :content_type => {:not => "application/zip"}