Class: ActiveStorage::Service
- Inherits:
-
Object
- Object
- ActiveStorage::Service
- Extended by:
- ActiveSupport::Autoload
- Defined in:
- lib/active_storage/service.rb
Overview
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. -
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_services.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(
:Disk,
root: Pathname("/foo/bar/storage")
)
Direct Known Subclasses
AzureService, DiskService, GCSService, MirrorService, S3Service
Defined Under Namespace
Classes: AzureService, Configurator, DiskService, GCSService, MirrorService, S3Service
Class Method Summary collapse
-
.build(configurator:, service: nil, **service_config) ⇒ Object
Override in subclasses that stitch together multiple services and hence need to build additional services using the configurator.
-
.configure(service_name, configurations) ⇒ Object
Configure an Active Storage service by name from a set of configurations, typically loaded from a YAML file.
Instance Method Summary collapse
-
#delete(key) ⇒ Object
Delete the file at the ‘key`.
-
#download(key) ⇒ Object
Return the content of the file at the ‘key`.
-
#exist?(key) ⇒ Boolean
Return true if a file exists at the ‘key`.
-
#headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:) ⇒ Object
Returns a Hash of headers for ‘url_for_direct_upload` requests.
-
#upload(key, io, checksum: nil) ⇒ Object
Upload the ‘io` to the `key` specified.
-
#url(key, expires_in:, disposition:, filename:, content_type:) ⇒ Object
Returns a signed, temporary URL for the file at the ‘key`.
-
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
Returns a signed, temporary URL that a direct upload file can be PUT to on the ‘key`.
Class Method Details
.build(configurator:, service: nil, **service_config) ⇒ Object
Override in subclasses that stitch together multiple services and hence need to build additional services using the configurator.
Passes the configurator and all of the service’s config as keyword args.
See MirrorService for an example.
56 57 58 |
# File 'lib/active_storage/service.rb', line 56 def build(configurator:, service: nil, **service_config) #:nodoc: new(**service_config) end |
.configure(service_name, configurations) ⇒ Object
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.
46 47 48 |
# File 'lib/active_storage/service.rb', line 46 def configure(service_name, configurations) Configurator.build(service_name, configurations) end |
Instance Method Details
#delete(key) ⇒ Object
Delete the file at the ‘key`.
73 74 75 |
# File 'lib/active_storage/service.rb', line 73 def delete(key) raise NotImplementedError end |
#download(key) ⇒ Object
Return the content of the file at the ‘key`.
68 69 70 |
# File 'lib/active_storage/service.rb', line 68 def download(key) raise NotImplementedError end |
#exist?(key) ⇒ Boolean
Return true if a file exists at the ‘key`.
78 79 80 |
# File 'lib/active_storage/service.rb', line 78 def exist?(key) raise NotImplementedError end |
#headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:) ⇒ Object
Returns a Hash of headers for ‘url_for_direct_upload` requests.
98 99 100 |
# File 'lib/active_storage/service.rb', line 98 def headers_for_direct_upload(key, filename:, content_type:, content_length:, checksum:) {} end |
#upload(key, io, checksum: nil) ⇒ Object
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`.
63 64 65 |
# File 'lib/active_storage/service.rb', line 63 def upload(key, io, checksum: nil) raise NotImplementedError end |
#url(key, expires_in:, disposition:, filename:, content_type:) ⇒ Object
Returns a signed, temporary URL for the file at the ‘key`. The URL will be valid for the amount of seconds specified in `expires_in`. You most also provide the `disposition` (`:inline` or `:attachment`), `filename`, and `content_type` that you wish the file to be served with on request.
85 86 87 |
# File 'lib/active_storage/service.rb', line 85 def url(key, expires_in:, disposition:, filename:, content_type:) raise NotImplementedError end |
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
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 most 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.
93 94 95 |
# File 'lib/active_storage/service.rb', line 93 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) raise NotImplementedError end |