class ActiveStorage::Blob

def build_after_upload(io:, filename:, content_type: nil, metadata: nil)

Returns a new, unsaved blob instance after the +io+ has been uploaded to the service.
def build_after_upload(io:, filename:, content_type: nil, metadata: nil)
  new.tap do |blob|
    blob.filename     = filename
    blob.content_type = content_type
    blob.metadata     = metadata
    blob.upload io
  end
end