2011-07-26 65 views
1

我有一個應用程序,必須接受幾乎每個文件類型,除了那些已知是很爛(即exe,dll,蝙蝠等)。我正在使用回形針,並想知道是否有辦法做到這一點。在github上提交之後,https://github.com/thoughtbot/paperclip/commit/020625921adae884534608d76c11f65692e4bbec看起來好像有可能。但我不確定。有沒有辦法在Paperclip中黑名單擴展?

更新:我找不到做事情的回形針的方式,但是我沒有添加這個自定義的驗證:

def extension_not_blacklisted? 
#An attempt to make a blacklist command when saving... 
forbiden_types = Array.new() 
forbiden_types << "jpg" << "exe" <<"dll" 
path_array = attachment.to_s.split(".") 
extension = path_array.pop 
extension_with_extras = extension.to_s.split("?") 
extension = extension_with_extras[0] 

forbiden_types.each do |f| 
    if f == extension 
    errors.add(:attachment,'FORBIDEN FILE EXTENSION: ' + extension) 
    end 
end 

回答

1

你自定義的驗證方法可能是唯一的出路。至少現在,Paperclip只能驗證內容類型,類似於:

validates_attachment_content_type :attachment, :content_type => ['image/png', 'application/pdf'], :message => 'should be a valid type' 

它驗證包含,而不是排除。

0

使用before_post_process過濾器和返回false如果擴展名是在你的黑名單 - 返回假將阻止執行其餘的處理鏈。

有關檢查有效文件大小的示例,請參閱此頁底部。

https://github.com/thoughtbot/paperclip/wiki/Thumbnail-Generation

+0

的before_post_process似乎只適用於製作縮略圖的形象,因爲我返回false,它仍然上傳大圖像,但不生成縮略圖。 –

0

您可以使用使用負向前查找正則表達式:

validates_attachment_content_type :attachment, :content_type => /\/(?!(php|pl|exe|pm|cfm|asp)$)/ 
相關問題