我正在开发一个消息传递系统供我们内部使用,每条消息都可以有附件。所述附件可以是几乎任何类型的文件,但是有些类型的文件我不想允许,例如EXE。
我不想在模型的验证中列出大量已接受的content_types,这些内容远非实用,并且肯定会阻止应该接受的文件,我宁愿简单地指定应该不是的内容类型被接受。
谷歌搜索没有产生任何结果,但我确定其他人之前遇到过这种情况,是否有任何想法如何最好地解决这个问题?
答案 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"}