我安装了 mime-types 这个 gem 后,一些常用的文件类型可以通过 MIME::Types.type_for("filename") 来获取 MIME 类型。
MIME::Types.type_for("filename")
但有一些比较少见的文件类型就无法获得,比如:.g2nua
请教有没有其它的方法?
我的最终目的是用 file_field 的参数:accept 来过滤上传的文件类型。
让上传文件的对话框里,只允许上传扩展名为.g2nua 的文件(就是文件类型下拉框里只有 .g2nua 文件可供选择,没有“所有文件”这一项)
mime-type 是最常使用的工具了,其原理是通过文件的扩展名匹配来判断文件类型,可扩展,通常这个就足够了。 另外一个办法是读取文件的头信息,Linux 下的系统命令 file 好像就是基于此。 安装了 imagemagick 后,会顺便安装一个叫做 identity 命令行工具,专门用于检查图片文件的类型。
file
imagemagick
identity
#1 楼 @lgn21st 谢谢回复,但我这个文件不是图片,是一种自定义格式的文件。
#2 楼 @bindiry 用 file 命令呀 不是图片也能处理
#3 楼 @hooopo 能详细说一下吗?
我的目的只是想让上传文件的对话框里,只允许上传扩展名为.g2nua 的文件(就是文件类型下拉框里只有 .g2nua 文件可供选择,没有“所有文件”这一项)
#4 楼 @bindiry It's impossible with HTML
我认为你做不到在浏览器的 <input type="file"> 做不到严格限制上传的文件类型,但是可以利用 input 的 change event 来用 JavaScript 来检查文件扩展名。
<input type="file">
Stackoverflow 上有一些讨论,希望多你有些帮助 http://stackoverflow.com/questions/4328947/limit-file-format-when-using-input-type-file
#4 楼 @bindiry 看你的资料你是在青岛对么?我现在人在莱西~
#6 楼 @lgn21st 确实,查了一下午,应该是做不到了,谢谢给的链接,还是用你的建议,用 js 再来检查一下吧。
对,我是青岛的,不过现在在老家过年。:)