diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/concerns/send_file_upload.rb | 8 | ||||
-rw-r--r-- | app/controllers/concerns/uploads_actions.rb | 12 | ||||
-rw-r--r-- | app/uploaders/object_storage.rb | 8 |
3 files changed, 18 insertions, 10 deletions
diff --git a/app/controllers/concerns/send_file_upload.rb b/app/controllers/concerns/send_file_upload.rb index d4de4cf1fda..e8636ab7901 100644 --- a/app/controllers/concerns/send_file_upload.rb +++ b/app/controllers/concerns/send_file_upload.rb @@ -1,12 +1,14 @@ module SendFileUpload - def send_upload(file_upload, send_params: {}, redirect_params: {}, attachment: nil) + def send_upload(file_upload, send_params: {}, redirect_params: {}, attachment: nil, disposition: 'attachment') if attachment - redirect_params[:query] = { "response-content-disposition" => "attachment;filename=#{attachment.inspect}" } - send_params.merge!(filename: attachment, disposition: 'attachment') + redirect_params[:query] = { "response-content-disposition" => "#{disposition};filename=#{attachment.inspect}" } + send_params.merge!(filename: attachment, disposition: disposition) end if file_upload.file_storage? send_file file_upload.path, send_params + elsif file_upload.class.proxy_download_enabled? + Gitlab::Workhorse.send_url(file_upload.url(**redirect_params)) else redirect_to file_upload.url(**redirect_params) end diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb index f4e19615760..b9b9b6e4e88 100644 --- a/app/controllers/concerns/uploads_actions.rb +++ b/app/controllers/concerns/uploads_actions.rb @@ -1,5 +1,6 @@ module UploadsActions include Gitlab::Utils::StrongMemoize + include SendFileUpload UPLOAD_MOUNTS = %w(avatar attachment file logo header_logo).freeze @@ -26,14 +27,11 @@ module UploadsActions def show return render_404 unless uploader&.exists? - if uploader.file_storage? - disposition = uploader.image_or_video? ? 'inline' : 'attachment' - expires_in 0.seconds, must_revalidate: true, private: true + expires_in 0.seconds, must_revalidate: true, private: true - send_file uploader.file.path, disposition: disposition - else - redirect_to uploader.url - end + disposition = uploader.image_or_video? ? 'inline' : 'attachment' + + send_upload(uploader, attachment: uploader.filename, disposition: disposition) end private diff --git a/app/uploaders/object_storage.rb b/app/uploaders/object_storage.rb index 1880cd100dc..132d78607d6 100644 --- a/app/uploaders/object_storage.rb +++ b/app/uploaders/object_storage.rb @@ -127,6 +127,14 @@ module ObjectStorage object_store_options.background_upload end + def proxy_download_enabled? + object_store_options.proxy_download + end + + def direct_download_enabled? + !proxy_download_enabled? + end + def object_store_credentials object_store_options.connection.to_hash.deep_symbolize_keys end |