怎么得到名字的最后4个字母

时间:2013-10-31 03:32:14

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

在_form中,我有一个上传文件的字段。 我要做的是检查文件是否包含危险的扩展名。

在我的情况下,如果扩展名为以下之一,则会返回错误消息: 。 '蝙蝠'。 “用”。 '可执行程序'。 'SRC' ,. '加利福尼亚'

所以我这样做了:

def suspitious_attachment        
  if ends_with? '.bat', '.com', '.exe', '.src', '.cmd'
    errors.add(:base, I18n.t('errors.messages.suspitious_attachment', :value => attachments.split(".").last))
  end
end

但这不是一个好主意,文件名称中可以包含多个点。

所以我想得到这个名字的最后4个字母。

我无法做到这一点,你能帮助我吗?

抱歉我的英文。

2 个答案:

答案 0 :(得分:3)

您可以使用[-4..-1][-4, 4]

'this.is.really.dangerous.file.exe'[-4..-1]
# => ".exe"
'this.is.really.dangerous.file.exe'[-4, 4]
# => ".exe"
'a_file.rb'[-4..-1]
# => "e.rb"

File::extname更适合获取文件名。

File.extname 'a_file.cmd'
# => ".cmd"
File.extname 'a_file.rb'
# => ".rb"
File.extname 'this.is.really.dangerous.file.exe'
# => ".exe"

答案 1 :(得分:2)

你在这里愚弄自己的虚假安全感。检查文件名称不会阻止某人上传带有虚假扩展名的文件。

如果您需要验证文件格式,则应该检查MIME类型。

在此处查看更多内容:How to check in rails uploaded file type?