diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2017-07-23 17:50:31 -0500 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2017-07-23 17:50:31 -0500 |
commit | 5944850bc1259ca42381ce83d155ddd914b968c6 (patch) | |
tree | a8579cc18b2d412a978b02385f15a22c56dd3ac4 /app/models | |
parent | cb2f7d499466acd2a8c9b917262914e46b5bf104 (diff) | |
download | rails-5944850bc1259ca42381ce83d155ddd914b968c6.tar.gz rails-5944850bc1259ca42381ce83d155ddd914b968c6.tar.bz2 rails-5944850bc1259ca42381ce83d155ddd914b968c6.zip |
Tell service which content-type to use for the response
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/active_storage/blob.rb | 2 | ||||
-rw-r--r-- | app/models/active_storage/service.rb | 2 | ||||
-rw-r--r-- | app/models/active_storage/service/disk_service.rb | 8 | ||||
-rw-r--r-- | app/models/active_storage/service/gcs_service.rb | 8 | ||||
-rw-r--r-- | app/models/active_storage/service/s3_service.rb | 5 | ||||
-rw-r--r-- | app/models/active_storage/variant.rb | 2 |
6 files changed, 16 insertions, 11 deletions
diff --git a/app/models/active_storage/blob.rb b/app/models/active_storage/blob.rb index fdf9a2c37d..3340c88d12 100644 --- a/app/models/active_storage/blob.rb +++ b/app/models/active_storage/blob.rb @@ -57,7 +57,7 @@ class ActiveStorage::Blob < ActiveRecord::Base def url(expires_in: 5.minutes, disposition: :inline) - service.url key, expires_in: expires_in, disposition: disposition, filename: filename + service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type end def url_for_direct_upload(expires_in: 5.minutes) diff --git a/app/models/active_storage/service.rb b/app/models/active_storage/service.rb index 745b1a615f..9d370d0a2b 100644 --- a/app/models/active_storage/service.rb +++ b/app/models/active_storage/service.rb @@ -74,7 +74,7 @@ class ActiveStorage::Service raise NotImplementedError end - def url(key, expires_in:, disposition:, filename:) + def url(key, expires_in:, disposition:, filename:, content_type:) raise NotImplementedError end diff --git a/app/models/active_storage/service/disk_service.rb b/app/models/active_storage/service/disk_service.rb index 59b180d0e8..3cde203a31 100644 --- a/app/models/active_storage/service/disk_service.rb +++ b/app/models/active_storage/service/disk_service.rb @@ -51,15 +51,17 @@ class ActiveStorage::Service::DiskService < ActiveStorage::Service end end - def url(key, expires_in:, disposition:, filename:) + def url(key, expires_in:, disposition:, filename:, content_type:) instrument :url, key do |payload| verified_key_with_expiration = ActiveStorage.verifier.generate(key, expires_in: expires_in, purpose: :blob_key) generated_url = if defined?(Rails) && defined?(Rails.application) - Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition, filename: filename) + Rails.application.routes.url_helpers.rails_disk_blob_path \ + verified_key_with_expiration, + disposition: disposition, filename: filename, content_type: content_type else - "/rails/active_storage/disk/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}" + "/rails/active_storage/disk/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}&content_type=#{content_type}" end payload[:url] = generated_url diff --git a/app/models/active_storage/service/gcs_service.rb b/app/models/active_storage/service/gcs_service.rb index 7053a130c0..4530de22f6 100644 --- a/app/models/active_storage/service/gcs_service.rb +++ b/app/models/active_storage/service/gcs_service.rb @@ -42,10 +42,12 @@ class ActiveStorage::Service::GCSService < ActiveStorage::Service end end - def url(key, expires_in:, disposition:, filename:) + def url(key, expires_in:, disposition:, filename:, content_type:) instrument :url, key do |payload| - query = { "response-content-disposition" => "#{disposition}; filename=\"#{filename}\"" } - generated_url = file_for(key).signed_url(expires: expires_in, query: query) + generated_url = file_for(key).signed_url expires: expires_in, query: { + "response-content-disposition" => "#{disposition}; filename=\"#{filename}\"", + "response-content-type" => content_type + } payload[:url] = generated_url diff --git a/app/models/active_storage/service/s3_service.rb b/app/models/active_storage/service/s3_service.rb index efffdec157..4c17f9902f 100644 --- a/app/models/active_storage/service/s3_service.rb +++ b/app/models/active_storage/service/s3_service.rb @@ -47,10 +47,11 @@ class ActiveStorage::Service::S3Service < ActiveStorage::Service end end - def url(key, expires_in:, disposition:, filename:) + def url(key, expires_in:, disposition:, filename:, content_type:) instrument :url, key do |payload| generated_url = object_for(key).presigned_url :get, expires_in: expires_in, - response_content_disposition: "#{disposition}; filename=\"#{filename}\"" + response_content_disposition: "#{disposition}; filename=\"#{filename}\"", + response_content_type: content_type payload[:url] = generated_url diff --git a/app/models/active_storage/variant.rb b/app/models/active_storage/variant.rb index 8785625cc8..d0fee3c62c 100644 --- a/app/models/active_storage/variant.rb +++ b/app/models/active_storage/variant.rb @@ -19,7 +19,7 @@ class ActiveStorage::Variant end def url(expires_in: 5.minutes, disposition: :inline) - service.url key, expires_in: expires_in, disposition: disposition, filename: blob.filename + service.url key, expires_in: expires_in, disposition: disposition, filename: blob.filename, content_type: blob.content_type end |