class ActiveStorage::Blob

Public Class Methods

find_or_create_before_resumable_upload!(filename:, byte_size:, checksum:, content_type: nil, metadata: nil) click to toggle source
# File lib/activestorage_extensions/blob.rb, line 9
def self.find_or_create_before_resumable_upload!(filename:, byte_size:, checksum:, content_type: nil, metadata: nil)
  expired_resumable.destroy_all
  active_resumable.find_or_create_by!(
    filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type, metadata: metadata
  ) do |blob|
    blob.resumable_url = blob.service_url_for_resumable_upload
  end
end

Public Instance Methods

service_url_for_resumable_upload() click to toggle source
# File lib/activestorage_extensions/blob.rb, line 31
def service_url_for_resumable_upload
  service.url_for_resumable_upload key, content_type: content_type
end
uploaded_bytes() click to toggle source
# File lib/activestorage_extensions/blob.rb, line 18
def uploaded_bytes
  return unless resumable_url

  @uploaded_bytes ||= begin
    uri = URI(resumable_url)
    req = Net::HTTP::Put.new(resumable_url, 'Content-Range': "bytes */#{byte_size}")
    http = Net::HTTP.new(uri.hostname, uri.port)
    http.use_ssl = true
    res = http.request(req)
    res['Range'].split('-').last.to_i + 1
  end
end