Module: SendFileUpload
- Included in:
- Admin::TopicsController, Groups::DependencyProxyForContainersController, GroupsController, Projects::ArtifactsController, Projects::DesignManagement::Designs::ResizedImageController, Projects::JobsController, Projects::Packages::PackageFilesController, ProjectsController, Repositories::LfsStorageController, UploadsActions
- Defined in:
- app/controllers/concerns/send_file_upload.rb
Instance Method Summary collapse
- #content_type_for(attachment) ⇒ Object
- #guess_content_type(filename) ⇒ Object
- #send_upload(file_upload, send_params: {}, redirect_params: {}, attachment: nil, proxy: false, disposition: 'attachment') ⇒ Object
Instance Method Details
#content_type_for(attachment) ⇒ Object
44 45 46 47 48 |
# File 'app/controllers/concerns/send_file_upload.rb', line 44 def content_type_for() return '' unless guess_content_type() end |
#guess_content_type(filename) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'app/controllers/concerns/send_file_upload.rb', line 50 def guess_content_type(filename) types = MIME::Types.type_for(filename) if types.present? types.first.content_type else "application/octet-stream" end end |
#send_upload(file_upload, send_params: {}, redirect_params: {}, attachment: nil, proxy: false, disposition: 'attachment') ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/controllers/concerns/send_file_upload.rb', line 4 def send_upload( file_upload, send_params: {}, redirect_params: {}, attachment: nil, proxy: false, disposition: 'attachment') content_type = content_type_for() if response_disposition = ActionDispatch::Http::ContentDisposition.format(disposition: disposition, filename: ) # 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" => response_disposition, "response-content-type" => content_type } # 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. send_params[:content_type] = 'text/plain' if File.extname() == '.js' send_params.merge!(filename: , disposition: disposition) end if image_scaling_request?(file_upload) location = file_upload.file_storage? ? file_upload.path : file_upload.url headers.store(*Gitlab::Workhorse.send_scaled_image(location, params[:width].to_i, content_type)) head :ok elsif file_upload.file_storage? send_file file_upload.path, send_params elsif file_upload.proxy_download_enabled? || proxy headers.store(*Gitlab::Workhorse.send_url(file_upload.url(**redirect_params))) head :ok else file_url = ObjectStorage::CDN::FileUrl.new( file: file_upload, ip_address: request.remote_ip, redirect_params: redirect_params) redirect_to file_url.url end end |