ruby-on-rails - 当 FileMagic 不是一个选项时,我如何可靠地确定文件类型?

标签 ruby-on-rails file ruby-on-rails-5 mime-types file-type

我使用的是 Rails 5.0.3。如何在不依赖文件扩展名的情况下可靠地确定文件类型(这是来 self 计算机上的文件,而不是我刚从 Internet 下载的文件)?我想要一种跨平台的方式来做到这一点,只是因为我使用 Mac 进行开发,使用 Linux 进行测试/生产。此外,由于此错误,gem file magic 不是一个选项

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)

最佳答案

filemagic不是你要找的 gem 。这似乎是某人的项目,不打算供公众使用(rubygems 页面链接到一家公司的网站,并且没有可用的源代码)。

相反,安装 ruby-filemagic gem 。这是 sourcedocumentation .我们可以像这样使用库:

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 识别文件类型的库. file命令,通常在 Unix/Linux 系统上找到,使用相同的库:

$ 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 的替代品。

关于ruby-on-rails - 当 FileMagic 不是一个选项时,我如何可靠地确定文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47129321/

相关文章:

ruby-on-rails - Rails "undefined method ' name' for nil :NilClass"error when adding @article. comments.size

ruby-on-rails - rails 3.1 + asset pipeline + webrick 对/images/的请求返回 406

python:读取和搜索 .txt 文件

ruby-on-rails - ActionCable 中的 `stream_from` 和 `stream_for` 有什么区别?

ruby-on-rails - 为什么我不能在 Rails 中更改 DateTime 的偏移量?

ruby-on-rails - 更改 Rails 中的默认 View 路径?

python - python中递归查找文件

php - 如何从文本文件中回显随机行

sql - Rails - 在日期可选时存储日期

mysql - rails 5 mysql 适配器问题