diff options
author | Nick Thomas <nick@gitlab.com> | 2018-09-06 14:30:15 +0300 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2018-09-06 14:30:15 +0300 |
commit | abc2caaa2894ee4bc9902228efc30a022044e7d1 (patch) | |
tree | 1998a120a01f2d12c264d6385623498d225a4817 /app | |
parent | 228d819b5761de1e2362952a9d0f08828c88424d (diff) | |
parent | 262b974123d22b5d6b662b232ca4792d7998a166 (diff) |
Merge branch 'sh-fix-attachments-inline' into 'master'
Fix attachments not displaying inline with Google Cloud Storage
Closes #49957
See merge request gitlab-org/gitlab-ce!21265
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/concerns/send_file_upload.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/app/controllers/concerns/send_file_upload.rb b/app/controllers/concerns/send_file_upload.rb index 237c93daee8..382ec91f771 100644 --- a/app/controllers/concerns/send_file_upload.rb +++ b/app/controllers/concerns/send_file_upload.rb @@ -1,7 +1,11 @@ module SendFileUpload def send_upload(file_upload, send_params: {}, redirect_params: {}, attachment: nil, disposition: 'attachment') if attachment - redirect_params[:query] = { "response-content-disposition" => "#{disposition};filename=#{attachment.inspect}" } + # Response-Content-Type will not override an existing Content-Type in + # Google Cloud Storage, so the metadata needs to be cleared on GCS for + # this to work. However, this override works with AWS. + redirect_params[:query] = { "response-content-disposition" => "#{disposition};filename=#{attachment.inspect}", + "response-content-type" => guess_content_type(attachment) } # By default, Rails will send uploads with an extension of .js with a # content-type of text/javascript, which will trigger Rails' # cross-origin JavaScript protection. @@ -18,4 +22,14 @@ module SendFileUpload redirect_to file_upload.url(**redirect_params) end end + + def guess_content_type(filename) + types = MIME::Types.type_for(filename) + + if types.present? + types.first.content_type + else + "application/octet-stream" + end + end end |