diff options
Diffstat (limited to 'lib/active_storage/service/disk_service.rb')
-rw-r--r-- | lib/active_storage/service/disk_service.rb | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/active_storage/service/disk_service.rb b/lib/active_storage/service/disk_service.rb index 668a837663..6164caf86c 100644 --- a/lib/active_storage/service/disk_service.rb +++ b/lib/active_storage/service/disk_service.rb @@ -9,12 +9,14 @@ class ActiveStorage::Service::DiskService < ActiveStorage::Service @root = root end - def upload(key, io) + def upload(key, io, checksum: nil) File.open(make_path_for(key), "wb") do |file| while chunk = io.read(64.kilobytes) file.write(chunk) end end + + ensure_integrity_of(key, checksum) if checksum end def download(key) @@ -59,4 +61,10 @@ class ActiveStorage::Service::DiskService < ActiveStorage::Service 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 |