Class: ActiveStorage::Service::DiskService
- Inherits:
-
ActiveStorage::Service
- Object
- ActiveStorage::Service
- ActiveStorage::Service::DiskService
- Defined in:
- lib/active_storage/service/disk_service.rb
Overview
Wraps a local disk path as a Active Storage service. See ‘ActiveStorage::Service` for the generic API documentation that applies to all services.
Instance Attribute Summary collapse
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
- #delete(key) ⇒ Object
- #download(key) ⇒ Object
- #exist?(key) ⇒ Boolean
- #headers_for_direct_upload(key, content_type:) ⇒ Object
-
#initialize(root:) ⇒ DiskService
constructor
A new instance of DiskService.
- #upload(key, io, checksum: nil) ⇒ Object
- #url(key, expires_in:, disposition:, filename:, content_type:) ⇒ Object
- #url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
Methods inherited from ActiveStorage::Service
Constructor Details
#initialize(root:) ⇒ DiskService
Returns a new instance of DiskService.
11 12 13 |
# File 'lib/active_storage/service/disk_service.rb', line 11 def initialize(root:) @root = root end |
Instance Attribute Details
#root ⇒ Object (readonly)
Returns the value of attribute root.
9 10 11 |
# File 'lib/active_storage/service/disk_service.rb', line 9 def root @root end |
Instance Method Details
#delete(key) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/active_storage/service/disk_service.rb', line 38 def delete(key) instrument :delete, key do begin File.delete path_for(key) rescue Errno::ENOENT # Ignore files already deleted end end end |
#download(key) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/active_storage/service/disk_service.rb', line 22 def download(key) if block_given? instrument :streaming_download, key do File.open(path_for(key), "rb") do |file| while data = file.read(64.kilobytes) yield data end end end else instrument :download, key do File.binread path_for(key) end end end |
#exist?(key) ⇒ Boolean
48 49 50 51 52 53 54 |
# File 'lib/active_storage/service/disk_service.rb', line 48 def exist?(key) instrument :exist, key do |payload| answer = File.exist? path_for(key) payload[:exist] = answer answer end end |
#headers_for_direct_upload(key, content_type:) ⇒ Object
101 102 103 |
# File 'lib/active_storage/service/disk_service.rb', line 101 def headers_for_direct_upload(key, content_type:, **) { "Content-Type" => content_type } end |
#upload(key, io, checksum: nil) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/active_storage/service/disk_service.rb', line 15 def upload(key, io, checksum: nil) instrument :upload, 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:, disposition:, filename:, content_type:) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/active_storage/service/disk_service.rb', line 56 def url(key, expires_in:, disposition:, filename:, content_type:) instrument :url, key do |payload| verified_key_with_expiration = ActiveStorage.verifier.generate(key, expires_in: expires_in, purpose: :blob_key) generated_url = if defined?(Rails.application) Rails.application.routes.url_helpers.rails_disk_service_path \ verified_key_with_expiration, disposition: disposition, filename: filename, content_type: content_type else "/rails/active_storage/disk/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}&content_type=#{content_type}" end payload[:url] = generated_url generated_url end end |
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/active_storage/service/disk_service.rb', line 75 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) instrument :url, 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 = if defined?(Rails.application) Rails.application.routes.url_helpers.update_rails_disk_service_path verified_token_with_expiration else "/rails/active_storage/disk/#{verified_token_with_expiration}" end payload[:url] = generated_url generated_url end end |