ruby Rails:如何根据MIME类型获取文件扩展名/后缀

enxuqcxy  于 2023-08-04  发布在  Ruby
关注(0)|答案(5)|浏览(131)

我的问题是,Ruby on Rails是否有类似于以下的功能:

file_content_type = MIME::Types.type_for(file).first.content_type

字符串
将返回特定MIME类型的文件扩展名或后缀的文件?因此,如果我传入'image/jpeg',函数将返回'jpg'
寻找一种更简洁的编码方式,而不是编写一个case语句来完成同样的工作。

pzfprimi

pzfprimi1#

Rack::Mime具有以下功能(Rack是Rails的依赖项):

require 'rack/mime'
Rack::Mime::MIME_TYPES.invert['image/jpeg']  #=> ".jpg"

字符串
如果您要经常进行查找,您可能希望记住反向散列,因为这不是一个廉价的操作。

px9o7tmv

px9o7tmv2#

一个更好的最新答案,因为我发现这个谷歌搜索。

Mime::Type.lookup('image/jpeg').symbol.to_s
# => "jpg"

字符串

n1bvdmb6

n1bvdmb63#

如果您使用的是ActiveStorage,Rails已经提供了一个方便的方法,因此您不需要自己查找mime类型。例如,对于具有附加图像的Post模型:

class Post < ApplicationRecord

  has_one_attached :image

字符串
您可以用途:

post_instance.image.blob.filename.extension

l2osamch

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"]

字符串

2guxujil

2guxujil5#

Marcel已按mime类型排序了扩展名列表:

Marcel::TYPES[mime_type][0][0]

字符串

相关问题