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

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

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

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

请教有没有其它的方法?

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

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

共收到 7 条回复

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再来检查一下吧。

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册