class ActiveStorage::Service::GCSService

Public Instance Methods

url_for_resumable_upload(key, content_type, **) click to toggle source
# File lib/activestorage_extensions/service/gcs_service.rb, line 8
def url_for_resumable_upload(key, content_type, **)
  instrument :url, key: key do |payload|
    signed_url = bucket.signed_url(key, method: 'PUT', content_type: content_type, version: :v4)

    uri = URI.parse(signed_url)
    https = Net::HTTP.new(uri.host, uri.port)
    https.use_ssl = true

    headers = {
      'Origin': ActiveStorage::Resumable.upload_origin_url,
      'x-goog-resumable': 'start'
    }
    request = Net::HTTP::Put.new(uri.request_uri, headers)
    response = https.request(request)

    generated_url = response['location']

    payload[:url] = generated_url

    generated_url
  end
end