2013-10-31 71 views
0

在_form中,我有一個字段來上傳文件。 我想要做的是檢查文件是否包含危險的擴展名。如何獲得名稱的最後4個字母

在我的情況下,如果擴展名是以下之一,我會返回一條錯誤消息: 。 '蝙蝠'。 「用」。 '可執行程序'。 '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個字母。

我無法做到這一點,你能幫助我嗎?

對不起,我的英文。

+0

如何檢查最後四個字母有什麼區別? – sawa

回答

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" 
2

你在這裏陷入虛假的安全感。檢查文件的名稱不會阻止某人上傳帶有假擴展名的文件。

如果您需要驗證文件格式,則應該檢查MIME類型。

查看更多這裏:How to check in rails uploaded file type?

相關問題