diff --git a/lib/file_store/s3_store.rb b/lib/file_store/s3_store.rb index 076ea2171ab..b2f9c20988b 100644 --- a/lib/file_store/s3_store.rb +++ b/lib/file_store/s3_store.rb @@ -91,7 +91,7 @@ module FileStore return url if SiteSetting.Upload.s3_cdn_url.blank? schema = url[/^(https?:)?\/\//, 1] folder = @s3_helper.s3_bucket_folder_path.nil? ? "" : "#{@s3_helper.s3_bucket_folder_path}/" - url.sub("#{schema}#{absolute_base_url}/#{folder}", "#{SiteSetting.Upload.s3_cdn_url}/") + url.sub("#{schema}#{absolute_base_url}/#{folder}", "#{SiteSetting.Upload.s3_cdn_url}#{Discourse.base_uri}/") end def cache_avatar(avatar, user_id) diff --git a/spec/components/file_store/s3_store_spec.rb b/spec/components/file_store/s3_store_spec.rb index 06948702dd7..99e46fe4ccc 100644 --- a/spec/components/file_store/s3_store_spec.rb +++ b/spec/components/file_store/s3_store_spec.rb @@ -282,4 +282,21 @@ describe FileStore::S3Store do assert_path("https://hello", nil) end end + + describe '.cdn_url' do + + it 'uses the correct path' do + url = "//s3-upload-bucket.s3-us-west-2.amazonaws.com/livechat/original/1X/2252ae522257fc537351e47bbdd34698936b6c38.jpeg" + expect(store.cdn_url(url)).to end_with('/livechat/original/1X/2252ae522257fc537351e47bbdd34698936b6c38.jpeg') + end + + it 'supports subfolder' do + SiteSetting.s3_upload_bucket = 's3-upload-bucket/livechat/community' + GlobalSetting.stubs(:relative_url_root).returns('/community') + Discourse.stubs(:base_uri).returns("/community") + url = "//s3-upload-bucket.s3-us-west-2.amazonaws.com/livechat/community/original/1X/2252ae522257fc537351e47bbdd34698936b6c38.jpeg" + expect(store.cdn_url(url)).to end_with('/livechat/community/original/1X/2252ae522257fc537351e47bbdd34698936b6c38.jpeg') + end + end + end