不推荐使用`CarrierWave :: MimeTypes`,上传者应如何处理/覆盖通用内容类型?

时间:2016-03-15 16:01:32

标签: ruby-on-rails carrierwave mime-types

问题

CarrierWave::MimeTypes已将set_content_type方法添加到上传器中,因此已弃用。除其他事项外,如果给定的内容类型是通用的(application/octet-streambinary/octet-stream),this method会尝试检测内容类型。

CarrierWave::MimeTypes的{​​{3}}说:

  

直接从SanitizedFile对象获取content_type

但是,如果定义它是否是通用的,则此类始终返回现有内容类型。 deprecation message

当前解决方案

现在我们通过清除内容类型来手动处理它,如果它是泛型类型并让库正确检测它。我们可以通过调用::MIME::Types.type_for来设置它,但是我们正在尝试将代码保持为尽可能兼容的升级。

问题/ tl;博士

现在不推荐application/octet-stream是否有使用通用内容类型(CarrierWave::MimeTypes)处理CarrierWave上传的最佳做法?

2 个答案:

答案 0 :(得分:1)

对于那些在我们有更好的事情之前来到这里的人,我们现有的解决方案如下:

# we replicate this idea of generic types from CarrierWave::MimeTypes
GENERIC_CONTENT_TYPES = %w[application/octet-stream binary/octet-stream]

# and add a clearing method to our uploader processor
process :clear_generic_content_type

def clear_generic_content_type
  file.content_type = nil if GENERIC_CONTENT_TYPES.include?(file.try(:content_type))
end

答案 1 :(得分:0)

Here on Carrierwave docs表示不再需要设置内容类型:

  

设置内容类型

     

从v0.11.0开始,mime-types gem是一个运行时依赖项   内容类型自动设置。你不再需要这样做了   手动