Module: CarrierWave::MimeTypes

Extended by:
ActiveSupport::Concern
Defined in:
lib/carrierwave/processing/mime_types.rb

Overview

This module simplifies the use of the mime-types gem to intelligently guess and set the content-type of a file. If you want to use this, you’ll need to require this file:

require 'carrierwave/processing/mime_types'

And then include it in your uploader:

class MyUploader < CarrierWave::Uploader::Base
  include CarrierWave::MimeTypes
end

You can now use the provided helper:

class MyUploader < CarrierWave::Uploader::Base
  include CarrierWave::MimeTypes

  process :set_content_type
end

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

GENERIC_CONTENT_TYPES =
%w[application/octet-stream binary/octet-stream]

Instance Method Summary collapse

Instance Method Details

#generic_content_type?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/carrierwave/processing/mime_types.rb', line 47

def generic_content_type?
  GENERIC_CONTENT_TYPES.include? file.content_type
end

#set_content_type(override = false) ⇒ Object

Changes the file content_type using the mime-types gem

Parameters

override (Boolean)

whether or not to override the file’s content_type if it is already set and not a generic content-type, false by default



60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/carrierwave/processing/mime_types.rb', line 60

def set_content_type(override=false)
  if override || file.content_type.blank? || generic_content_type?
    new_content_type = ::MIME::Types.type_for(file.original_filename).first.to_s
    if file.respond_to?(:content_type=)
      file.content_type = new_content_type
    else
      file.instance_variable_set(:@content_type, new_content_type)
    end
  end
rescue ::MIME::InvalidContentType => e
  raise CarrierWave::ProcessingError, I18n.translate(:"errors.messages.mime_types_processing_error", :e => e)
end