我正在使用Rails 5.0.3。如何在不依赖文件扩展名的情况下可靠地确定文件类型(这是来自我的计算机上的文件,而不是我刚刚从Internet下载的文件)?我想要一种跨平台的方式来做这件事只是因为我使用Mac进行开发,使用Linux进行测试/生成。此外,由于此错误,gem文件魔法不是一个选项
Bundler could not find compatible versions for gem "rails":
In Gemfile:
rails (~> 5.0.1)
filemagic was resolved to 0.3.5.0, which depends on
rails (< 5, >= 4.2.0)
答案 0 :(得分:3)
filemagic
不是您正在寻找的宝石。这似乎是某个不打算供公众使用的项目(rubygems页面链接到公司的网站,并且没有源代码可用)。
相反,请安装ruby-filemagic
gem。这是source和documentation。我们可以像这样使用库:
begin
fm = FileMagic.new(FileMagic::MAGIC_MIME)
puts fm.file("foo.txt", true)
ensure
fm.close
end
...或者使用open()
辅助方法,它自动为我们关闭资源:
FileMagic.open(FileMagic::MAGIC_MIME) { |fm| puts fm.file("foo.txt", true) }
这也适用于另一个助手mime()
,它还为我们设置了标志:
FileMagic.mime { |fm| puts fm.file("foo.txt", true) }
此gem依赖于libmagic,这是一个用于使用文件magic number识别文件类型的库。通常在Unix / Linux系统上找到的file命令使用相同的库:
$ file --mime-type foo.txt
foo.txt: text/plain
我们也可以从Ruby应用程序调用此命令来获取文件的MIME类型:
IO.popen(["file", "--mime-type", "--brief", "foo.txt"]) { |io| puts io.read.chomp }
MimeMagic是FileMagic的替代品。