Rails 怎样获取一个文件的 MIME 类型?

bindiry · 2012年01月26日 · 最后由 bindiry 回复于 2012年02月04日 · 8934 次阅读

我安装了 mime-types 这个 gem 后,一些常用的文件类型可以通过 MIME::Types.type_for("filename") 来获取 MIME 类型。

但有一些比较少见的文件类型就无法获得,比如:.g2nua

请教有没有其它的方法?

我的最终目的是用 file_field 的参数:accept 来过滤上传的文件类型。

让上传文件的对话框里,只允许上传扩展名为.g2nua 的文件(就是文件类型下拉框里只有 .g2nua 文件可供选择,没有 “所有文件” 这一项)

mime-type 是最常使用的工具了,其原理是通过文件的扩展名匹配来判断文件类型,可扩展,通常这个就足够了。 另外一个办法是读取文件的头信息,Linux 下的系统命令 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 来检查文件扩展名。

Stackoverflow 上有一些讨论,希望多你有些帮助 http://stackoverflow.com/questions/4328947/limit-file-format-when-using-input-type-file

#4 楼 @bindiry 看你的资料你是在青岛对么?我现在人在莱西~

#6 楼 @lgn21st 确实,查了一下午,应该是做不到了,谢谢给的链接,还是用你的建议,用 js 再来检查一下吧。

对,我是青岛的,不过现在在老家过年。:)

需要 登陆 后方可回复, 如果你还没有账号请 注册新账号