class ActiveStorage::Blob
Schema: id, key, filename, content_type, metadata, byte_size, checksum, created_at
Public Class Methods
build_after_upload(io:, filename:, content_type: nil, metadata: nil)
click to toggle source
# File lib/active_storage/blob.rb, line 15 def build_after_upload(io:, filename:, content_type: nil, metadata: nil) new.tap do |blob| blob.filename = filename blob.content_type = content_type blob.metadata = metadata blob.upload io end end
create_after_upload!(io:, filename:, content_type: nil, metadata: nil)
click to toggle source
# File lib/active_storage/blob.rb, line 25 def create_after_upload!(io:, filename:, content_type: nil, metadata: nil) build_after_upload(io: io, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!) end
Public Instance Methods
delete()
click to toggle source
# File lib/active_storage/blob.rb, line 56 def delete service.delete key end
download()
click to toggle source
# File lib/active_storage/blob.rb, line 51 def download service.download key end
filename()
click to toggle source
# File lib/active_storage/blob.rb, line 35 def filename ActiveStorage::Filename.new(self[:filename]) end
key()
click to toggle source
We can't wait until the record is first saved to have a key for it
# File lib/active_storage/blob.rb, line 31 def key self[:key] ||= self.class.generate_unique_secure_token end
purge()
click to toggle source
# File lib/active_storage/blob.rb, line 60 def purge delete destroy end
purge_later()
click to toggle source
# File lib/active_storage/blob.rb, line 65 def purge_later ActiveStorage::PurgeJob.perform_later(self) end
upload(io)
click to toggle source
# File lib/active_storage/blob.rb, line 44 def upload(io) self.checksum = compute_checksum_in_chunks(io) self.byte_size = io.size service.upload(key, io, checksum: checksum) end
url(expires_in: 5.minutes, disposition: :inline)
click to toggle source
# File lib/active_storage/blob.rb, line 39 def url(expires_in: 5.minutes, disposition: :inline) service.url key, expires_in: expires_in, disposition: disposition, filename: filename end
Private Instance Methods
compute_checksum_in_chunks(io)
click to toggle source
# File lib/active_storage/blob.rb, line 71 def compute_checksum_in_chunks(io) Digest::MD5.new.tap do |checksum| while chunk = io.read(5.megabytes) checksum << chunk end io.rewind end.base64digest end