Problem
CarrierWave::MimeTypes
,其中添加了set_content_type
上传者的方法已被弃用。除其他事项外,这个方法 https://github.com/carrierwaveuploader/carrierwave/blob/v0.10.0/lib/carrierwave/processing/mime_types.rb#L61如果给定的内容类型是通用的(或者application/octet-stream
or binary/octet-stream
).
The 弃用消息 https://github.com/carrierwaveuploader/carrierwave/blob/v0.10.0/lib/carrierwave/processing/mime_types.rb#L30 for CarrierWave::MimeTypes
says:
直接从 SanitizedFile 对象获取 content_type
但是,如果定义了该类,则无论它是否是通用的,该类始终返回现有的内容类型。请参阅此处的代码 https://github.com/carrierwaveuploader/carrierwave/blob/v0.10.0/lib/carrierwave/sanitized_file.rb#L246.
目前的解决方案
目前,我们通过清除内容类型(如果它是泛型类型)并让库正确检测它来手动处理此问题。我们可以通过调用来自行设置::MIME::Types.type_for
然而,我们正在尝试尽可能保持我们的代码兼容升级。
问题/tl;博士
是否有处理通用内容类型的 CarrierWave 上传的最佳实践(application/octet-stream
) 现在CarrierWave::MimeTypes
已弃用?
对于那些在我们有更好的方案之前就到达这里的人来说,我们现有的解决方案如下:
# 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)