确定Ruby中的文件类型

时间:2020-03-05 18:49:57  来源:igfitidea点击:

如何可靠地确定文件的类型?文件扩展名分析是不可接受的。必须有一个类似于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