Handle base64 encoded attachments with paperclip < 3.5.0
Dienstag, 09. Mai 2017, 11:36 Uhr | roberto@vasquez-angel.de
|
module Base64EncodedAssets
extend ActiveSupport::Concern
included do
before_validation :decode_base64_asset
end
def decode_base64_asset
if asset.uploaded_file =~ /^data:([-\w]+\/[-\w\+]+);base64,(.*)/
content_type = $LAST_MATCH_INFO[1]
asset_data = $LAST_MATCH_INFO[2]
decoded_data = Base64.decode64(asset_data)
file_extension = Rack::Mime::MIME_TYPES.invert[content_type]
data = StringIO.new(decoded_data)
data.class_eval do
attr_accessor :content_type, :original_filename
end
data.content_type = content_type
data.original_filename = File.basename("#{SecureRandom.uuid}#{file_extension}")
self.asset = data
end
end
end
include Base64EncodedAssets if Paperclip::VERSION < '3.5.0'