Provide a BlobsController for stable blob URLs

We need to have stable urls for blobs and variants or caching won't work. So provide a controller that can give that and redirect to the service URL upon lookup.
上级 46da4ee7
# Take a signed permanent reference for a blob and turn it into an expiring service URL for its download.
# Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
# security-through-obscurity factor of the signed blob references, you'll need to implement your own
# authenticated redirection controller.
class ActiveStorage::BlobsController < ActionController::Base
def show
if blob = find_signed_blob
redirect_to blob.url(disposition: disposition_param)
else
head :not_found
end
end
private
def find_signed_blob
ActiveStorage::Blob.find_signed(params[:signed_id])
end
def disposition_param
params[:disposition].presence_in(%w( inline attachment )) || "inline"
end
end
Rails.application.routes.draw do
get "/rails/active_storage/blobs/:signed_id/*filename" => "active_storage/blobs#show", as: :rails_service_blob
direct :rails_blob do |blob|
route_for(:rails_service_blob, blob.signed_id, blob.filename)
end
resolve("ActiveStorage::Blob") { |blob| route_for(:rails_blob, blob) }
resolve("ActiveStorage::Attachment") { |attachment| route_for(:rails_blob, attachment.blob) }
get "/rails/active_storage/variants/:signed_blob_id/:variation_key/*filename" => "active_storage/variants#show", as: :rails_blob_variation
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册