aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_storage/service/disk_service.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_storage/service/disk_service.rb')
-rw-r--r--lib/active_storage/service/disk_service.rb89
1 files changed, 0 insertions, 89 deletions
diff --git a/lib/active_storage/service/disk_service.rb b/lib/active_storage/service/disk_service.rb
deleted file mode 100644
index a2a27528c1..0000000000
--- a/lib/active_storage/service/disk_service.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require "fileutils"
-require "pathname"
-require "digest/md5"
-require "active_support/core_ext/numeric/bytes"
-
-class ActiveStorage::Service::DiskService < ActiveStorage::Service
- attr_reader :root
-
- def initialize(root:)
- @root = root
- end
-
- 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
-
- 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
-
- def delete(key)
- instrument :delete, key do
- begin
- File.delete path_for(key)
- rescue Errno::ENOENT
- # Ignore files already deleted
- end
- end
- end
-
- def exist?(key)
- instrument :exist, key do |payload|
- answer = File.exist? path_for(key)
- payload[:exist] = answer
- answer
- end
- end
-
- def url(key, expires_in:, disposition:, filename:)
- instrument :url, key do |payload|
- verified_key_with_expiration = ActiveStorage::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
-
- generated_url =
- if defined?(Rails) && defined?(Rails.application)
- Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition, filename: filename)
- else
- "/rails/active_storage/disk/#{verified_key_with_expiration}/#{filename}?disposition=#{disposition}"
- end
-
- payload[:url] = generated_url
-
- generated_url
- end
- end
-
- private
- def path_for(key)
- File.join root, folder_for(key), key
- end
-
- def folder_for(key)
- [ key[0..1], key[2..3] ].join("/")
- end
-
- def make_path_for(key)
- path_for(key).tap { |path| FileUtils.mkdir_p File.dirname(path) }
- end
-
- def ensure_integrity_of(key, checksum)
- unless Digest::MD5.file(path_for(key)).base64digest == checksum
- raise ActiveStorage::IntegrityError
- end
- end
-end