2009-11-06 70 views
2

我有一個上傳文本文件字段,並且我計劃將文件保存在某個地方,然後將該文件的位置存儲在數據庫中。但是,我想確保他們上傳的文件是.txt文件,而不是像圖像文件。我想這在驗證步驟中發生。如何驗證這樣的事情?另外,你如何獲得上傳文件的文件名?我總是可以檢查它是否說'.txt',但爲了將來的參考知道如何驗證,而不僅僅是文件名將是有益的。(rails)如何驗證上傳的.txt文件是否不是圖像文件?

回答

7

試圖驗證基於文件擴展名的文件的內容正在爲主要黑客打開大門。改變擴展名並上傳文件是微不足道的。

如果您在基於Mac/Linux/Unix的系統上,則使用OS「file」命令,因爲它在文件內部查找標記文件類型的關鍵字節。 http://en.wikipedia.org/wiki/File_(Unix)我不確定Windows有什麼功能,但這可能有所幫助:Determine file type in Ruby

+0

我以前使用過它,它的工作原理完美。作爲我的Windows解決方案,我只是使用Cygwin的'file'命令。 – mculp 2009-11-06 16:51:46

0

這樣做的一種方式,簡單的方法是通過一個圖像加載器,最好是一個處理多種常見格式的文件,並查看它是否會引發錯誤。

另一種方法是手動檢查文件標題的常見圖像格式標題。例如,.bmp文件以BM開頭。其他格式有他們自己可以使用的特定標記。