From fe6e4472bde9c2825d61623860d65b5e977b6581 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 9 Oct 2024 10:37:58 +0100 Subject: [PATCH] Refactor collection resources to use storage service --- app/controllers/start_controller.rb | 2 +- app/helpers/collection_resources_helper.rb | 4 +-- app/services/collection_resources_service.rb | 34 +++++++------------- app/services/storage/local_disk_service.rb | 9 ++++++ app/services/storage/s3_service.rb | 4 +++ 5 files changed, 27 insertions(+), 26 deletions(-) diff --git a/app/controllers/start_controller.rb b/app/controllers/start_controller.rb index cffd310db..dd4232b7b 100644 --- a/app/controllers/start_controller.rb +++ b/app/controllers/start_controller.rb @@ -68,7 +68,7 @@ private def download_resource(filename, download_filename) file = CollectionResourcesService.new.get_file(filename) - render_not_found unless file + return render_not_found unless file send_data(file, disposition: "attachment", filename: download_filename) end diff --git a/app/helpers/collection_resources_helper.rb b/app/helpers/collection_resources_helper.rb index fcb75e18b..5ab539cde 100644 --- a/app/helpers/collection_resources_helper.rb +++ b/app/helpers/collection_resources_helper.rb @@ -15,8 +15,8 @@ module CollectionResourcesHelper return [file_pages].compact.join(", ") unless metadata - file_size = number_to_human_size(metadata["Content-Length"].to_i) - file_type = HUMAN_READABLE_CONTENT_TYPE[metadata["Content-Type"].to_sym] || "Unknown File Type" + file_size = number_to_human_size(metadata["content_length"].to_i) + file_type = HUMAN_READABLE_CONTENT_TYPE[metadata["content_type"].to_sym] || "Unknown File Type" [file_type, file_size, file_pages].compact.join(", ") end end diff --git a/app/services/collection_resources_service.rb b/app/services/collection_resources_service.rb index f4e778351..c17b3a272 100644 --- a/app/services/collection_resources_service.rb +++ b/app/services/collection_resources_service.rb @@ -1,33 +1,21 @@ class CollectionResourcesService def initialize - @storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"]) + @storage_service = if Rails.env.development? + Storage::LocalDiskService.new + else + Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"]) + end end def get_file(file) - storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"]) - url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}" - uri = URI.parse(url) - - response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| - request = Net::HTTP::Get.new(uri) - http.request(request) - end - - return unless response.is_a?(Net::HTTPSuccess) - - response.body + @storage_service.get_file_io(file) + rescue StandardError + nil end def get_file_metadata(file) - storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"]) - url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}" - uri = URI.parse(url) - - response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http| - http.request_head(uri) - end - return unless response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection) - - response + @storage_service.get_file_metadata(file) + rescue StandardError + nil end end diff --git a/app/services/storage/local_disk_service.rb b/app/services/storage/local_disk_service.rb index f0cc358d1..cd99d3d48 100644 --- a/app/services/storage/local_disk_service.rb +++ b/app/services/storage/local_disk_service.rb @@ -22,5 +22,14 @@ module Storage f.write data end end + + def get_file_metadata(filename) + path = Rails.root.join("tmp/storage", filename) + + { + "content_length" => File.size(path), + "content_type" => MiniMime.lookup_by_filename(path.to_s)&.content_type || "application/octet-stream", + } + end end end diff --git a/app/services/storage/s3_service.rb b/app/services/storage/s3_service.rb index 3592eaa67..0cd4a1f20 100644 --- a/app/services/storage/s3_service.rb +++ b/app/services/storage/s3_service.rb @@ -39,6 +39,10 @@ module Storage ) end + def get_file_metadata(file_name) + @client.head_object(bucket: @configuration.bucket_name, key: file_name) + end + private def create_configuration