ActiveStorage should give users the option to proxy files. This would allow files to be cached by a CDN (image load times for my application went from 500+ms to 50ms) 🚀. Something along the lines of this is what I'm proposing:
# frozen_string_literal: true module ActiveStorage class BlobsController < BaseController include ActiveStorage::SetBlob def show if ActiveStorage.redirect_to_service_url expires_in ActiveStorage.service_urls_expire_in redirect_to @blob.service_url(disposition: params[:disposition]) else stream_blob end end def stream_blob expires_in ActiveStorage.service_urls_expire_in, public: true response.headers['Content-Type'] = params[:content_type] response.headers['Content-Disposition'] = params[:disposition] @blob.download do |chunk| response.stream.write(chunk) end ensure response.stream.close end end end Users looking for image loading with a CDN could set this up by setting app.config.active_storage.redirect_to_service_url = false app.config.active_storage.service_urls_expire_in = 1.year I just threw this together for a project I'm working on, but I would be happy to clean this up and make a proper pull request if the Rails team is open to the idea. There's a fair amount of people requesting this feature https://github.com/rails/rails/issues/31419 some of the solutions in this issue are directly linking to the service files, but streaming would keep the service provider abstracted away while also allowing for proper CDN caching. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.