Dav*_*ave 3 file-type ruby-on-rails file mime-types ruby-on-rails-5
我正在使用 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)
Run Code Online (Sandbox Code Playgroud)
filemagic不是你要找的宝石。这似乎是某人的项目不打算供公众使用(rubygems 页面链接到公司网站,并且没有可用的源代码)。
相反,安装ruby-filemagicgem。这是来源和文档。我们可以像这样使用这个库:
begin
fm = FileMagic.new(FileMagic::MAGIC_MIME)
puts fm.file("foo.txt", true)
ensure
fm.close
end
Run Code Online (Sandbox Code Playgroud)
...或者通过使用open()辅助方法,它会自动为我们关闭资源:
FileMagic.open(FileMagic::MAGIC_MIME) { |fm| puts fm.file("foo.txt", true) }
Run Code Online (Sandbox Code Playgroud)
这也适用于另一个助手,mime(),它另外为我们设置了标志:
FileMagic.mime { |fm| puts fm.file("foo.txt", true) }
Run Code Online (Sandbox Code Playgroud)
这个 gem 依赖于libmagic,这是一个用于使用文件的幻数识别文件类型的库。Unix/Linux 系统上常见的file命令使用相同的库:
$ file --mime-type foo.txt
foo.txt: text/plain
Run Code Online (Sandbox Code Playgroud)
我们还可以从 Ruby 应用程序调用此命令来获取文件的 MIME 类型:
IO.popen(["file", "--mime-type", "--brief", "foo.txt"]) { |io| puts io.read.chomp }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |