diff --git a/app/models/asset.rb b/app/models/asset.rb index 7c1faca30..eaeedc0df 100644 --- a/app/models/asset.rb +++ b/app/models/asset.rb @@ -448,6 +448,14 @@ class Asset < ApplicationRecord !locked? && %r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES_EDITABLE)}} =~ file.content_type end + def generate_temp_file + tempfile = Tempfile.new + tempfile.binmode + tempfile << file.download + tempfile.rewind + tempfile + end + private def tempdir diff --git a/app/models/concerns/tiny_mce_images.rb b/app/models/concerns/tiny_mce_images.rb index 4d4ba4819..59ccbf3e0 100644 --- a/app/models/concerns/tiny_mce_images.rb +++ b/app/models/concerns/tiny_mce_images.rb @@ -73,7 +73,7 @@ module TinyMceImages tiny_img_clone.transaction do tiny_img_clone.save! - tiny_img_clone.image.attach(io: StringIO.new(tiny_img.image.download), + tiny_img_clone.image.attach(io: tiny_img.generate_temp_file, filename: tiny_img.file_name, content_type: tiny_img.content_type, metadata: tiny_img.image.metadata) @@ -99,7 +99,7 @@ module TinyMceImages next if asset && asset.object == self && asset.team_id != asset_team_id - new_image = StringIO.new(asset.image.download) + new_image = asset.generate_temp_file new_image_filename = new_image.file_name else # We need implement size and type checks here diff --git a/app/models/protocol.rb b/app/models/protocol.rb index ebed10671..00aa986f9 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -294,7 +294,7 @@ class Protocol < ApplicationRecord step.assets.each do |asset| asset2 = asset.dup asset2.save! - asset2.file.attach(io: StringIO.new(asset.file.download), + asset2.file.attach(io: asset.generate_temp_file, filename: asset.file_name, content_type: asset.content_type, metadata: asset.file.metadata) diff --git a/app/models/tiny_mce_asset.rb b/app/models/tiny_mce_asset.rb index 93da21b3f..70f0dda5b 100644 --- a/app/models/tiny_mce_asset.rb +++ b/app/models/tiny_mce_asset.rb @@ -170,7 +170,7 @@ class TinyMceAsset < ApplicationRecord tiny_img_clone.transaction do tiny_img_clone.save! - tiny_img_clone.image.attach(io: StringIO.new(image.download), + tiny_img_clone.image.attach(io: image.generate_temp_file, filename: file_name, content_type: content_type, metadta: image.metadata) @@ -191,6 +191,14 @@ class TinyMceAsset < ApplicationRecord obj.reassign_tiny_mce_image_references(cloned_img_ids) end + def generate_temp_file + tempfile = Tempfile.new + tempfile.binmode + tempfile << image.download + tempfile.rewind + tempfile + end + private def self_destruct