aboutsummaryrefslogblamecommitdiffstats
path: root/activestorage/app/controllers/active_storage/direct_uploads_controller.rb
blob: cbe2cf2c358797a917436c5a7a933a87a38d34d3 (plain) (tree)
1
2
3
4
5
6
7
8
9

                             


                                                                                                                
                                                                            

                                                                      
                                         





                                                                                                                  






                                                              
   
# frozen_string_literal: true

# Creates a new blob on the server side in anticipation of a direct-to-service upload from the client side.
# When the client-side upload is completed, the signed_blob_id can be submitted as part of the form to reference
# the blob that was created up front.
class ActiveStorage::DirectUploadsController < ActiveStorage::BaseController
  def create
    blob = ActiveStorage::Blob.create_before_direct_upload!(blob_args)
    render json: direct_upload_json(blob)
  end

  private
    def blob_args
      params.require(:blob).permit(:filename, :byte_size, :checksum, :content_type, :metadata).to_h.symbolize_keys
    end

    def direct_upload_json(blob)
      blob.as_json(methods: :signed_id).merge(direct_upload: {
        url: blob.service_url_for_direct_upload,
        headers: blob.service_headers_for_direct_upload
      })
    end
end