W3cubDocs

/Ruby on Rails 7.0

class ActiveStorage::Service

Parent:
Object

Abstract class serving as an interface for concrete services.

The available services are:

  • Disk, to manage attachments saved directly on the hard drive.

  • GCS, to manage attachments through Google Cloud Storage.

  • S3, to manage attachments through Amazon S3.

  • AzureStorage, to manage attachments through Microsoft Azure Storage.

  • Mirror, to be able to use several services to manage attachments.

Inside a Rails application, you can set-up your services through the generated config/storage.yml file and reference one of the aforementioned constant under the service key. For example:

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

You can checkout the service's constructor to know which keys are required.

Then, in your application's configuration, you can specify the service to use like this:

config.active_storage.service = :local

If you are using Active Storage outside of a Ruby on Rails application, you can configure the service to use like this:

ActiveStorage::Blob.service = ActiveStorage::Service.configure(
  :local,
  { local: {service: "Disk",  root: Pathname("/tmp/foo/storage") } }
)

Attributes

name[RW]

Public Class Methods

configure(service_name, configurations) Show source
# File activestorage/lib/active_storage/service.rb, line 50
def configure(service_name, configurations)
  Configurator.build(service_name, configurations)
end

Configure an Active Storage service by name from a set of configurations, typically loaded from a YAML file. The Active Storage engine uses this to set the global Active Storage service when the app boots.

Public Instance Methods

compose(source_keys, destination_key, filename: nil, content_type: nil, disposition: nil, custom_metadata: {}) Show source
# File activestorage/lib/active_storage/service.rb, line 94
def compose(source_keys, destination_key, filename: nil, content_type: nil, disposition: nil, custom_metadata: {})
  raise NotImplementedError
end

Concatenate multiple files into a single “composed” file.

delete(key) Show source
# File activestorage/lib/active_storage/service.rb, line 99
def delete(key)
  raise NotImplementedError
end

Delete the file at the key.

delete_prefixed(prefix) Show source
# File activestorage/lib/active_storage/service.rb, line 104
def delete_prefixed(prefix)
  raise NotImplementedError
end

Delete files at keys starting with the prefix.

download(key) Show source
# File activestorage/lib/active_storage/service.rb, line 80
def download(key)
  raise NotImplementedError
end

Return the content of the file at the key.

download_chunk(key, range) Show source
# File activestorage/lib/active_storage/service.rb, line 85
def download_chunk(key, range)
  raise NotImplementedError
end

Return the partial content in the byte range of the file at the key.

exist?(key) Show source
# File activestorage/lib/active_storage/service.rb, line 109
def exist?(key)
  raise NotImplementedError
end

Return true if a file exists at the key.

headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:, custom_metadata: {}) Show source
# File activestorage/lib/active_storage/service.rb, line 141
def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:, custom_metadata: {})
  {}
end

Returns a Hash of headers for url_for_direct_upload requests.

open(*args, **options, &block) Show source
# File activestorage/lib/active_storage/service.rb, line 89
def open(*args, **options, &block)
  ActiveStorage::Downloader.new(self).open(*args, **options, &block)
end
public?() Show source
# File activestorage/lib/active_storage/service.rb, line 145
def public?
  @public
end
update_metadata(key, **metadata) Show source
# File activestorage/lib/active_storage/service.rb, line 76
def update_metadata(key, **metadata)
end

Update metadata for the file identified by key in the service. Override in subclasses only if the service needs to store specific metadata that has to be updated upon identification.

upload(key, io, checksum: nil, **options) Show source
# File activestorage/lib/active_storage/service.rb, line 69
def upload(key, io, checksum: nil, **options)
  raise NotImplementedError
end

Upload the io to the key specified. If a checksum is provided, the service will ensure a match when the upload has completed or raise an ActiveStorage::IntegrityError.

url(key, **options) Show source
# File activestorage/lib/active_storage/service.rb, line 117
def url(key, **options)
  instrument :url, key: key do |payload|
    generated_url =
      if public?
        public_url(key, **options)
      else
        private_url(key, **options)
      end

    payload[:url] = generated_url

    generated_url
  end
end

Returns the URL for the file at the key. This returns a permanent URL for public files, and returns a short-lived URL for private files. For private files you can provide the disposition (:inline or :attachment), filename, and content_type that you wish the file to be served with on request. Additionally, you can also provide the amount of seconds the URL will be valid for, specified in expires_in.

url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:, custom_metadata: {}) Show source
# File activestorage/lib/active_storage/service.rb, line 136
def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:, custom_metadata: {})
  raise NotImplementedError
end

Returns a signed, temporary URL that a direct upload file can be PUT to on the key. The URL will be valid for the amount of seconds specified in expires_in. You must also provide the content_type, content_length, and checksum of the file that will be uploaded. All these attributes will be validated by the service upon upload.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.