diff --git a/app/logical/s3_backup_service.rb b/app/logical/s3_backup_service.rb index fe55cb966..156f7926f 100644 --- a/app/logical/s3_backup_service.rb +++ b/app/logical/s3_backup_service.rb @@ -12,6 +12,11 @@ class S3BackupService < BackupService upload_to_s3(key, file_path) end + def delete(file_path, type: nil) + key = s3_key(file_path, type) + delete_from_s3(key) + end + protected def s3_key(file_path, type) case type @@ -26,6 +31,12 @@ protected end end + def delete_from_s3(key) + client.delete_object(bucket: bucket, key: key) + rescue Aws::S3::Errors::NoSuchKey + # ignore + end + def upload_to_s3(key, file_path) File.open(file_path, "rb") do |body| base64_md5 = Digest::MD5.base64digest(File.read(file_path)) diff --git a/app/models/post.rb b/app/models/post.rb index 98f6a638c..2c19821c7 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -74,6 +74,10 @@ class Post < ApplicationRecord end end + backup_service.delete(file_path, type: :original) + backup_service.delete(large_file_path, type: :large) + backup_service.delete(preview_file_path, type: :preview) + # the large file and the preview don't necessarily exist. if so errors will be ignored. FileUtils.rm_f(file_path) FileUtils.rm_f(large_file_path) diff --git a/app/models/post_replacement.rb b/app/models/post_replacement.rb index b2c85c4e3..ef5d03373 100644 --- a/app/models/post_replacement.rb +++ b/app/models/post_replacement.rb @@ -18,11 +18,6 @@ class PostReplacement < ApplicationRecord end def process! - # TODO images hosted on s3 need to be deleted from s3 instead of the local filesystem. - if Danbooru.config.use_s3_proxy?(post) - raise NotImplementedError.new("Replacing S3 hosted images not yet supported.") - end - transaction do upload = Upload.create!(file: replacement_file, source: replacement_url, rating: post.rating, tag_string: self.tags) upload.process_upload