From 77ee8c1a53f4124e36012b01801ab801f36dd58d Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Fri, 5 Jul 2019 14:31:04 +0100 Subject: [PATCH] Monkey patch Active Storage to set content type when uploading to S3 --- config/initializers/active_storage.rb | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 config/initializers/active_storage.rb diff --git a/config/initializers/active_storage.rb b/config/initializers/active_storage.rb new file mode 100644 index 000000000..3d2c91265 --- /dev/null +++ b/config/initializers/active_storage.rb @@ -0,0 +1,31 @@ +Rails.configuration.after_initialize do + require "active_storage/service/s3_service" + require_dependency "active_storage/variant" + + module OpenStreetMap + module ActiveStorage + module Variant + private + + def upload(image) + File.open(image.path, "r") { |file| service.upload(key, file, :content_type => content_type) } + end + end + + module S3Service + def upload(key, io, content_type:, **options) + @upload_options[:content_type] = content_type + super(key, io, **options) + @upload_options.delete(:content_type) + end + end + end + end + + ActiveStorage::Variant.prepend(OpenStreetMap::ActiveStorage::Variant) + ActiveStorage::Service::S3Service.prepend(OpenStreetMap::ActiveStorage::S3Service) + + ActiveSupport::Reloader.to_complete do + ActiveStorage::Variant.prepend(OpenStreetMap::ActiveStorage::Variant) + end +end -- 2.43.2