/ / (rails) как да проверите дали даден .txt файл не е, да речем, файл с изображение? - ruby-on-rails, валидиране, качване на файлове

(релси) как да проверите дали качен .txt файл не е, да речем, файл с изображение? - рубин на релсите, валидиране, качване на файлове

Имам поле за текстов файл за качване, а с него и азпланирате да запазите файла някъде и след това да съхраните местоположението на файла в база данни. Въпреки това искам да се уверя, че каченият файл е .txt файл, а не, например, файл с изображение. Предполагам, че това се случва в стъпката на валидиране. Как се потвърждава такова нещо? Също така, как да получите името на файла на качения файл? Винаги мога просто да проверя дали е казал ".txt", но за бъдещи справки, знаейки как да се валидира само с името на файла ще бъде полезно.

Отговори:

7 за отговор № 1

Опитът да се потвърди съдържанието на файл, базиран на разширение на името на файла, отваря вратата за големи хакери. Тривиално е да промените разширението и да качите файла.

Ако сте на Mac / Linux / Unix-базирана система, командата OS "file" е стандартна, защото изглежда във файла за ключови байтове, които маркират типове файлове. http://en.wikipedia.org/wiki/File_(Unix) Не съм сигурен какво е достъпно за Windows, но това може да помогне: Определете типа на файла в Ruby


0 за отговор № 2

Един от начините да го направите, простият начин наистина, ще бъде да преминете файла чрез зареждане на изображение, за предпочитане такъв, който обработва множество общи формати, и да видите дали той хвърля грешка.

Другият начин е ръчно да проверите заглавката на файла за общите заглавия на формата на изображението. Например, .bmp файловете започват с BM. Други формати имат свои специфични маркировки, които можете да използвате.