Actually #url needs to deal with the disposition

上级 9b9d69b3
......@@ -33,8 +33,8 @@ def filename
ActiveFile::Filename.new(self[:filename])
end
def url(expires_in: 5.minutes)
site.url key, expires_in: expires_in
def url(expires_in: 5.minutes, disposition: :inline)
site.url key, expires_in: expires_in, disposition: disposition, filename: filename
end
......
......@@ -27,7 +27,7 @@ def exist?(key)
end
def url(key, expires_in: nil)
def url(key, expires_in:, disposition:, filename:)
raise NotImplementedError
end
......
......@@ -37,13 +37,13 @@ def exist?(key)
end
def url(key, expires_in: nil)
def url(key, expires_in:, disposition:, filename:)
verified_key_with_expiration = ActiveFile::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
if defined?(Rails)
Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration)
Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition)
else
"/rails/blobs/#{verified_key_with_expiration}"
"/rails/blobs/#{verified_key_with_expiration}?disposition=#{disposition}"
end
end
......
......@@ -29,8 +29,9 @@ def exist?(key)
end
def url(key, expires_in: nil)
object_for(key).presigned_url(:get, expires_in: expires_in)
def url(key, expires_in:, disposition:, filename:)
object_for(key).presigned_url :get, expires_in: expires_in,
response_content_disposition: "#{disposition}; filename=#{filename}"
end
def byte_size(key)
......
......@@ -12,16 +12,22 @@ class ActiveFile::BlobTest < ActiveSupport::TestCase
assert_equal Digest::MD5.hexdigest(data), blob.checksum
end
test "url expiring in 5 minutes" do
test "urls expiring in 5 minutes" do
blob = create_blob
travel_to Time.now do
assert_equal "/rails/blobs/#{ActiveFile::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}", blob.url
assert_equal expected_url_for(blob), blob.url
assert_equal expected_url_for(blob, disposition: :attachment), blob.url(disposition: :attachment)
end
end
private
def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain")
ActiveFile::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type
end
def expected_url_for(blob, disposition: :inline)
"/rails/blobs/#{ActiveFile::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}?disposition=#{disposition}"
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册