我的问题是,Ruby on Rails是否有类似于以下的功能:
file_content_type = MIME::Types.type_for(file).first.content_type
字符串将返回特定MIME类型的文件扩展名或后缀的文件?因此,如果我传入'image/jpeg',函数将返回'jpg'寻找一种更简洁的编码方式,而不是编写一个case语句来完成同样的工作。
pzfprimi1#
Rack::Mime具有以下功能(Rack是Rails的依赖项):
Rack::Mime
require 'rack/mime' Rack::Mime::MIME_TYPES.invert['image/jpeg'] #=> ".jpg"
字符串如果您要经常进行查找,您可能希望记住反向散列,因为这不是一个廉价的操作。
px9o7tmv2#
一个更好的最新答案,因为我发现这个谷歌搜索。
Mime::Type.lookup('image/jpeg').symbol.to_s # => "jpg"
字符串
n1bvdmb63#
如果您使用的是ActiveStorage,Rails已经提供了一个方便的方法,因此您不需要自己查找mime类型。例如,对于具有附加图像的Post模型:
class Post < ApplicationRecord has_one_attached :image
字符串您可以用途:
post_instance.image.blob.filename.extension
型
l2osamch4#
你也可以选择马塞尔。它随Rails(ActiveStorage gem)一起提供。https://github.com/rails/marcel它将MimeType表散列到扩展中。您不需要自己反转杂凑。它可能是记忆友好的。请注意,它的常量是私有的,在将来的版本中可能会更改。https://github.com/rails/marcel/blob/main/lib/marcel/tables.rb#L1261
iirb(main):008:0> Marcel::TYPES["image/jpeg"] => [["jpg", "jpeg", "jpe", "jif", "jfif", "jfi"], [], "Joint Photographic Experts Group"]
2guxujil5#
Marcel已按mime类型排序了扩展名列表:
Marcel::TYPES[mime_type][0][0]
5条答案
按热度按时间pzfprimi1#
Rack::Mime
具有以下功能(Rack是Rails的依赖项):字符串
如果您要经常进行查找,您可能希望记住反向散列,因为这不是一个廉价的操作。
px9o7tmv2#
一个更好的最新答案,因为我发现这个谷歌搜索。
字符串
n1bvdmb63#
如果您使用的是ActiveStorage,Rails已经提供了一个方便的方法,因此您不需要自己查找mime类型。例如,对于具有附加图像的Post模型:
字符串
您可以用途:
型
l2osamch4#
你也可以选择马塞尔。它随Rails(ActiveStorage gem)一起提供。
https://github.com/rails/marcel
它将MimeType表散列到扩展中。
您不需要自己反转杂凑。它可能是记忆友好的。
请注意,它的常量是私有的,在将来的版本中可能会更改。
https://github.com/rails/marcel/blob/main/lib/marcel/tables.rb#L1261
字符串
2guxujil5#
Marcel已按mime类型排序了扩展名列表:
字符串