【发布时间】:2010-12-13 17:26:17
【问题描述】:
我有一个上传文本文件字段,我打算用它把文件保存在某个地方,然后将文件的位置存储在数据库中。但是,我想确保他们上传的文件是 .txt 文件,而不是图像文件。我想这发生在验证步骤中。如何验证这样的事情?另外,如何获取上传文件的文件名?我总是可以检查它是否说“.txt”,但为了将来参考,知道如何在没有文件名的情况下进行验证会很有帮助。
【问题讨论】:
标签: ruby-on-rails validation file-upload
我有一个上传文本文件字段,我打算用它把文件保存在某个地方,然后将文件的位置存储在数据库中。但是,我想确保他们上传的文件是 .txt 文件,而不是图像文件。我想这发生在验证步骤中。如何验证这样的事情?另外,如何获取上传文件的文件名?我总是可以检查它是否说“.txt”,但为了将来参考,知道如何在没有文件名的情况下进行验证会很有帮助。
【问题讨论】:
标签: ruby-on-rails validation file-upload
一种方法,实际上是简单的方法,是通过图像加载器传递文件,最好是处理多种常见格式的图像加载器,然后查看它是否引发错误。
另一种方法是手动检查文件头是否有常见的图像格式头。例如,.bmp 文件以 BM 开头。其他格式有自己的特定标记,您可以使用。
【讨论】:
尝试根据文件扩展名验证文件的内容正在为主要的黑客行为打开大门。更改扩展名并上传文件很简单。
如果您在基于 Mac/Linux/Unix 的系统上,操作系统“文件”命令是标准的,因为它会在文件内部查找标记文件类型的关键字节。 http://en.wikipedia.org/wiki/File_(Unix)我不确定 Windows 有什么可用的,但这可能会有所帮助:Determine file type in Ruby
【讨论】:
file 命令。