From e8983a28d986412caae19adcd3cd8471d04f850f Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Fri, 20 Jan 2023 22:56:30 +0100 Subject: [PATCH] Fix generated URLs for native files in subdirectories Our handling of uploaded files (see FilesController#show_protected_upload) checks for the full file name including the file path. However, URLs generated by CarrierWave didn't contain any path information resulting in invalid URLs. The wrong behavior was only visible when serving native files was disabled in Rails (or by using the x_sendfile_header). --- app/uploaders/file_uploader.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/uploaders/file_uploader.rb b/app/uploaders/file_uploader.rb index 78b4168d..f9cbeeb1 100644 --- a/app/uploaders/file_uploader.rb +++ b/app/uploaders/file_uploader.rb @@ -6,4 +6,14 @@ class FileUploader < CarrierWave::Uploader::Base def store_dir "uploads/files/#{model.id}" end + + def url(*args) + if model.path? + desired = encode_path("uploads/files/#{model.id}/#{model.path}") + generated = encode_path(store_dir) + super&.sub(generated, desired) + else + super + end + end end