mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
DRY
This commit is contained in:
parent
8bd14971b9
commit
376dd5c001
8 changed files with 20 additions and 16 deletions
|
@ -8,7 +8,7 @@ class ActiveStorage::DiskController < ActionController::Base
|
|||
def show
|
||||
if key = decode_verified_key
|
||||
send_data disk_service.download(key),
|
||||
filename: params[:filename], disposition: disposition_param, content_type: params[:content_type]
|
||||
disposition: disposition_param, content_type: params[:content_type]
|
||||
else
|
||||
head :not_found
|
||||
end
|
||||
|
@ -39,7 +39,7 @@ class ActiveStorage::DiskController < ActionController::Base
|
|||
end
|
||||
|
||||
def disposition_param
|
||||
params[:disposition].presence_in(%w( inline attachment )) || "inline"
|
||||
params[:disposition].presence || "inline"
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -127,7 +127,7 @@ class ActiveStorage::Blob < ActiveRecord::Base
|
|||
# Hiding the +service_url+ behind a redirect also gives you the power to change services without updating all URLs. And
|
||||
# it allows permanent URLs that redirect to the +service_url+ to be cached in the view.
|
||||
def service_url(expires_in: 5.minutes, disposition: :inline)
|
||||
service.url key, expires_in: expires_in, disposition: disposition, filename: filename, content_type: content_type
|
||||
service.url key, expires_in: expires_in, disposition: "#{disposition}; filename=\"#{filename}\"", filename: filename, content_type: content_type
|
||||
end
|
||||
|
||||
# Returns a URL that can be used to directly upload a file for this blob on the service. This URL is intended to be
|
||||
|
|
|
@ -59,12 +59,16 @@ module ActiveStorage
|
|||
end
|
||||
end
|
||||
|
||||
def url(key, expires_in:, disposition:, filename:, content_type:)
|
||||
def url(key, expires_in:, filename:, disposition:, content_type:)
|
||||
instrument :url, key do |payload|
|
||||
base_url = url_for(key)
|
||||
generated_url = signer.signed_uri(URI(base_url), false, permissions: "r",
|
||||
expiry: format_expiry(expires_in), content_type: content_type,
|
||||
content_disposition: "#{disposition}; filename=\"#{filename}\"").to_s
|
||||
generated_url = signer.signed_uri(
|
||||
URI(base_url), false,
|
||||
permissions: "r",
|
||||
expiry: format_expiry(expires_in),
|
||||
content_disposition: disposition,
|
||||
content_type: content_type
|
||||
).to_s
|
||||
|
||||
payload[:url] = generated_url
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ module ActiveStorage
|
|||
end
|
||||
end
|
||||
|
||||
def url(key, expires_in:, disposition:, filename:, content_type:)
|
||||
def url(key, expires_in:, filename:, disposition:, content_type:)
|
||||
instrument :url, key do |payload|
|
||||
verified_key_with_expiration = ActiveStorage.verifier.generate(key, expires_in: expires_in, purpose: :blob_key)
|
||||
|
||||
|
@ -64,7 +64,7 @@ module ActiveStorage
|
|||
if defined?(Rails.application)
|
||||
Rails.application.routes.url_helpers.rails_disk_service_path \
|
||||
verified_key_with_expiration,
|
||||
disposition: disposition, filename: filename, content_type: content_type
|
||||
filename: filename, disposition: disposition, content_type: content_type
|
||||
else
|
||||
"/rails/active_storage/disk/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}&content_type=#{content_type}"
|
||||
end
|
||||
|
|
|
@ -47,10 +47,10 @@ module ActiveStorage
|
|||
end
|
||||
end
|
||||
|
||||
def url(key, expires_in:, disposition:, filename:, content_type:)
|
||||
def url(key, expires_in:, filename:, content_type:, disposition:)
|
||||
instrument :url, key do |payload|
|
||||
generated_url = file_for(key).signed_url expires: expires_in, query: {
|
||||
"response-content-disposition" => "#{disposition}; filename=\"#{filename}\"",
|
||||
"response-content-disposition" => disposition,
|
||||
"response-content-type" => content_type
|
||||
}
|
||||
|
||||
|
|
|
@ -52,10 +52,10 @@ module ActiveStorage
|
|||
end
|
||||
end
|
||||
|
||||
def url(key, expires_in:, disposition:, filename:, content_type:)
|
||||
def url(key, expires_in:, disposition:, filename:, disposition:, 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,
|
||||
response_content_type: content_type
|
||||
|
||||
payload[:url] = generated_url
|
||||
|
|
|
@ -8,7 +8,7 @@ class ActiveStorage::DiskControllerTest < ActionDispatch::IntegrationTest
|
|||
blob = create_blob
|
||||
|
||||
get blob.service_url
|
||||
assert_equal "inline; filename=\"#{blob.filename.base}\"", @response.headers["Content-Disposition"]
|
||||
assert_equal "inline; filename=\"hello.txt\"", @response.headers["Content-Disposition"]
|
||||
assert_equal "text/plain", @response.headers["Content-Type"]
|
||||
end
|
||||
|
||||
|
@ -16,7 +16,7 @@ class ActiveStorage::DiskControllerTest < ActionDispatch::IntegrationTest
|
|||
blob = create_blob
|
||||
|
||||
get blob.service_url(disposition: :attachment)
|
||||
assert_equal "attachment; filename=\"#{blob.filename.base}\"", @response.headers["Content-Disposition"]
|
||||
assert_equal "attachment; filename=\"hello.txt\"", @response.headers["Content-Disposition"]
|
||||
assert_equal "text/plain", @response.headers["Content-Type"]
|
||||
end
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ class ActiveStorage::BlobTest < ActiveSupport::TestCase
|
|||
|
||||
private
|
||||
def expected_url_for(blob, disposition: :inline)
|
||||
query_string = { content_type: blob.content_type, disposition: disposition }.to_param
|
||||
query_string = { content_type: blob.content_type, disposition: "#{disposition}; filename=\"#{blob.filename}\"" }.to_param
|
||||
"/rails/active_storage/disk/#{ActiveStorage.verifier.generate(blob.key, expires_in: 5.minutes, purpose: :blob_key)}/#{blob.filename}?#{query_string}"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue