From 4e7fb486cf4a17c3a670845692e1d2de1da35c63 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Tue, 11 Dec 2018 14:50:18 +0800 Subject: [PATCH 2/2] deletes thumbnails when the attachment diskfile is deleted - to avoid duplicating the thumbnail naming logic, a new method thumbnail_path is introduced that computes the path for a given size value --- app/models/attachment.rb | 10 +++++++++- test/unit/attachment_test.rb | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index fd4931eaf..ac9561c26 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -216,7 +216,7 @@ class Attachment < ActiveRecord::Base size = Setting.thumbnails_size.to_i end size = 100 unless size > 0 - target = File.join(self.class.thumbnails_storage_path, "#{digest}_#{filesize}_#{size}.thumb") + target = thumbnail_path(size) begin Redmine::Thumbnail.generate(self.diskfile, target, size) @@ -463,6 +463,14 @@ class Attachment < ActiveRecord::Base if disk_filename.present? && File.exist?(diskfile) File.delete(diskfile) end + Dir[thumbnail_path("*")].each do |thumb| + File.delete(thumb) + end + end + + def thumbnail_path(size) + File.join(self.class.thumbnails_storage_path, + "#{digest}_#{filesize}_#{size}.thumb") end def sanitize_filename(value) diff --git a/test/unit/attachment_test.rb b/test/unit/attachment_test.rb index c89ed5631..a1b4c1993 100644 --- a/test/unit/attachment_test.rb +++ b/test/unit/attachment_test.rb @@ -456,6 +456,21 @@ class AttachmentTest < ActiveSupport::TestCase assert_equal a_thumb, b_thumb end + def test_destroy_should_destroy_thumbnails + a = Attachment.create!( + :container => Issue.find(1), + :file => uploaded_test_file("2010/11/101123161450_testfile_1.png", "image/png"), + :author => User.find(1) + ) + diskfile = a.diskfile + thumbnail = a.thumbnail + assert File.exist?(diskfile) + assert File.exist?(thumbnail) + assert a.destroy + refute File.exist?(diskfile) + refute File.exist?(thumbnail) + end + def test_thumbnail_should_return_nil_if_generation_fails Redmine::Thumbnail.expects(:generate).raises(SystemCallError, 'Something went wrong') set_fixtures_attachments_directory -- 2.11.0