Rails:.m4v文件的MIME类型问题

在我的Rails应用程序中,我试图获取文件的MIME类型,如下所示:

MIME::Types.type_for("example.m4v").to_s 

但它没有认识到它。

我尝试将以下内容添加到config/initializers/mime_types.rb (并重启服务器),没有任何运气:

Mime::Type.register "video/mp4", :m4v

您需要config/initializers/mime_types.rb添加到config/initializers/mime_types.rb文件中:

 # register MIME type with Rails Mime::Type.register "video/mp4", :m4v # register MIME type with MIME::Type gem MIME::Types.add(MIME::Type.from_array("video/mp4", %(m4v))) 

现在在控制台中,您可以测试结果

 MIME::Types.type_for("abc.m4v").to_s #=> "video/mp4" 

所以我认为Mime :: Type和MIME :: Types完全是彼此分开的。 请注意,它是“Mime”vs“MIME”。

例如,

 MIME::Types.type_for("foo.json") 

回报

  [#] 

然而,

 Mime::Type.lookup_by_extension("json") 

回报

 # 

所以看起来如果你想添加一个类型,以便在使用type_for时返回它,你可以使用以下代码:

 >> t = MIME::Type.from_array('video/mp4', %w(m4v)) => # >> MIME::Types.add(t) Type video/mp4 already registered as a variant of video/mp4. => [#] >> MIME::Types.type_for("example.m4v") => [#] >> 

调用add时的警告有点令人担忧,所以你应该弄清楚如何将扩展名附加到“video / mp4”类型。 有关更多信息,请查看MIME :: Types和MIME :: Type的文档。