确定Ruby中的文件类型
如何可靠地确定文件的类型?文件扩展名分析是不可接受的。必须有一个类似于UNIX file(1)命令的rubyesque工具吗?
这与MIME或者内容类型有关,与文件系统分类(例如目录,文件或者套接字)无关。
解决方案
回答
我们可以尝试使用MIME :: Types for Ruby。
This library allows for the identification of a file’s likely MIME content type. The identification of MIME content type is based on a file’s filename extensions.
回答
如果我们使用的是Unix计算机,请尝试以下操作:
mimetype = `file -Ib #{path}`.gsub(/\n/,"")
我不知道任何能像"文件"一样可靠工作的纯Ruby解决方案。
编辑添加:根据我们正在运行的操作系统,我们可能需要使用'i'而不是'I'来获取返回mime类型的文件。
回答
我们可以尝试共享mime(gem安装shared-mime-info)。需要使用Freedesktop shared-mime-info库,但同时进行文件名/扩展名检查和"魔术"检查...尝试自己尝试一下,但我没有freedesktop shared-mime-info不幸的是,数据库已安装并且必须做"实际工作",但这可能正是我们要寻找的。
回答
红宝石绑定到libmagic
可以满足需求。它可以作为名为ruby-filemagic的gem获得:
gem install ruby-filemagic
需要libmagic-dev
。
该文档似乎有些薄,但这应该可以入门:
$ irb irb(main):001:0> require 'filemagic' => true irb(main):002:0> fm = FileMagic.new => #<FileMagic:0x7fd4afb0> irb(main):003:0> fm.file('foo.zip') => "Zip archive data, at least v2.0 to extract" irb(main):004:0>
回答
红宝石宝石很好。
红宝石的MIME类型
回答
我最近发现了mimetype-fu。
这似乎是获取文件的MIME类型的最简单可靠的解决方案。
唯一需要注意的是,在Windows计算机上,它仅使用文件扩展名,而在基于* Nix的系统上,它的效果很好。
回答
我发现炮击是最可靠的。为了兼容Mac OS X和Ubuntu Linux,我使用了:
文件--mime -b myvideo.mp4
视频/ mp4;字符集=二进制
Ubuntu也会打印视频编解码器信息(如果可以的话),这很酷:
文件-b myvideo.mp4
ISO媒体,MPEG v4系统,版本2