Ruby on rails (rails)如何验证上传的.txt文件是否是图像文件?

Ruby on rails (rails)如何验证上传的.txt文件是否是图像文件?,ruby-on-rails,validation,file-upload,Ruby On Rails,Validation,File Upload,我有一个上传文本文件字段,我计划用它将文件保存在某个地方,然后将文件的位置存储在数据库中。但是,我想确保他们上传的文件是.txt文件,而不是图像文件。我想这是在验证步骤中发生的。如何验证这样一件事?另外,如何获取上传文件的文件名?我可以随时检查它是否显示“.txt”,但为了将来的参考,知道如何在不使用文件名的情况下进行验证会很有帮助。一种方法,实际上很简单,就是将文件通过一个图像加载程序,最好是一个处理多种常见格式的加载程序,然后查看它是否抛出错误 另一种方法是手动检查文件头中的通用图像格式头。

我有一个上传文本文件字段,我计划用它将文件保存在某个地方,然后将文件的位置存储在数据库中。但是,我想确保他们上传的文件是.txt文件,而不是图像文件。我想这是在验证步骤中发生的。如何验证这样一件事?另外,如何获取上传文件的文件名?我可以随时检查它是否显示“.txt”,但为了将来的参考,知道如何在不使用文件名的情况下进行验证会很有帮助。

一种方法,实际上很简单,就是将文件通过一个图像加载程序,最好是一个处理多种常见格式的加载程序,然后查看它是否抛出错误


另一种方法是手动检查文件头中的通用图像格式头。例如,.bmp文件以BM开头。其他格式有自己的特定标记,您可以使用。

试图根据文件扩展名验证文件内容,这为主要黑客打开了大门。更改扩展名并上载文件很简单


如果您在基于Mac/Linux/Unix的系统上,OS“file”命令是标准命令,因为它在文件中查找标记文件类型的关键字节。我不确定Windows有哪些可用功能,但这可能会有所帮助:

我以前使用过这个功能,它工作得非常好。作为我的Windows解决方案,我只使用Cygwin的
file
命令。