Class: ActiveStorage::Service::DiskService
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
self,
::ActiveStorage::Service
|
|
Inherits: |
ActiveStorage::Service
|
Defined in: | activestorage/lib/active_storage/service/disk_service.rb |
Overview
Wraps a local disk path as an Active Storage service. See ::ActiveStorage::Service
for the generic API documentation that applies to all services.
Class Attribute Summary
::ActiveStorage::Service
- Inherited
Class Method Summary
- .new(root:) ⇒ DiskService constructor
::ActiveStorage::Service
- Inherited
.configure | Configure an Active Storage service by name from a set of configurations, typically loaded from a YAML file. |
::ActiveSupport::Autoload
- Extended
Instance Attribute Summary
Instance Method Summary
- #delete(key)
- #delete_prefixed(prefix)
- #download(key)
- #download_chunk(key, range)
- #exist?(key) ⇒ Boolean
- #headers_for_direct_upload(key, content_type:)
- #upload(key, io, checksum: nil)
- #url(key, expires_in:, filename:, disposition:, content_type:)
- #url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
::ActiveStorage::Service
- Inherited
#delete | Delete the file at the |
#delete_prefixed | Delete files at keys starting with the |
#download | Return the content of the file at the |
#download_chunk | Return the partial content in the byte |
#exist? | Return |
#headers_for_direct_upload | Returns a |
#update_metadata | Update metadata for the file identified by |
#upload | Upload the |
#url | Returns a signed, temporary URL for the file at the |
#url_for_direct_upload | Returns a signed, temporary URL that a direct upload file can be PUT to on the |
Constructor Details
.new(root:) ⇒ DiskService
# File 'activestorage/lib/active_storage/service/disk_service.rb', line 14
def initialize(root:) @root = root end
Instance Attribute Details
#root (readonly)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 12
attr_reader :root
Instance Method Details
#delete(key)
[ GitHub ]#delete_prefixed(prefix)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 60
def delete_prefixed(prefix) instrument :delete_prefixed, prefix: prefix do Dir.glob(path_for("#{prefix}*")).each do |path| FileUtils.rm_rf(path) end end end
#download(key)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 25
def download(key) if block_given? instrument :streaming_download, key: key do File.open(path_for(key), "rb") do |file| while data = file.read(5.megabytes) yield data end end end else instrument :download, key: key do File.binread path_for(key) end end end
#download_chunk(key, range)
[ GitHub ]
#exist?(key) ⇒ Boolean
#headers_for_direct_upload(key, content_type:)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 126
def headers_for_direct_upload(key, content_type:, **) { "Content-Type" => content_type } end
#upload(key, io, checksum: nil)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 18
def upload(key, io, checksum: nil, **) instrument :upload, key: key, checksum: checksum do IO.copy_stream(io, make_path_for(key)) ensure_integrity_of(key, checksum) if checksum end end
#url(key, expires_in:, filename:, disposition:, content_type:)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 76
def url(key, expires_in:, filename:, disposition:, content_type:) instrument :url, key: key do |payload| content_disposition = content_disposition_with(type: disposition, filename: filename) verified_key_with_expiration = ActiveStorage.verifier.generate( { key: key, disposition: content_disposition, content_type: content_type }, { expires_in: expires_in, purpose: :blob_key } ) current_uri = URI.parse(current_host) generated_url = url_helpers.rails_disk_service_url(verified_key_with_expiration, protocol: current_uri.scheme, host: current_uri.host, port: current_uri.port, disposition: content_disposition, content_type: content_type, filename: filename ) payload[:url] = generated_url generated_url end end
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:)
[ GitHub ]# File 'activestorage/lib/active_storage/service/disk_service.rb', line 105
def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) instrument :url, key: key do |payload| verified_token_with_expiration = ActiveStorage.verifier.generate( { key: key, content_type: content_type, content_length: content_length, checksum: checksum }, { expires_in: expires_in, purpose: :blob_token } ) generated_url = url_helpers.update_rails_disk_service_url(verified_token_with_expiration, host: current_host) payload[:url] = generated_url generated_url end end