Sha256: 6539763170112956561bb8aded9848b9c98c23890b7ad0ea4862084ba94f5042

Contents?: true

Size: 985 Bytes

Versions: 2

Compression:

Stored size: 985 Bytes

Contents

module Carrierwave
  module Base64
    class Base64StringIO < StringIO
      attr_accessor :file_extension, :file_name

      def initialize(encoded_file, file_name)
        description, encoded_bytes = encoded_file.split(',')

        raise ArgumentError unless encoded_bytes
        raise ArgumentError if encoded_bytes.eql?('(null)')

        @file_name = file_name
        @file_extension = get_file_extension description
        bytes = ::Base64.decode64 encoded_bytes

        super bytes
      end

      def original_filename
        File.basename("#{@file_name}.#{@file_extension}")
      end

      private

      def get_file_extension(description)
        content_type = description.split(';base64').first
        mime_type = MIME::Types[content_type].first
        unless mime_type
          raise Carrierwave::Base64::UnknownMimeTypeError,
                "Unknown MIME type: #{content_type}"
        end
        mime_type.preferred_extension
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
carrierwave-base64-2.7.0 lib/carrierwave/base64/base64_string_io.rb
carrierwave-base64-2.6.1 lib/carrierwave/base64/base64_string_io.rb