Sha256: 67416f2be852af936bfd16cf885dfb3faddcb85a3272632d9b7d7b2f791e3efd
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
require "aws-sdk" require "active_support/core_ext/numeric/bytes" class ActiveStorage::Service::S3Service < ActiveStorage::Service attr_reader :client, :bucket def initialize(access_key_id:, secret_access_key:, region:, bucket:) @client = Aws::S3::Resource.new(access_key_id: access_key_id, secret_access_key: secret_access_key, region: region) @bucket = @client.bucket(bucket) end def upload(key, io, checksum: nil) # FIXME: Ensure integrity by sending the checksum for service side verification object_for(key).put(body: io) end def download(key) if block_given? stream(key, &block) else object_for(key).get.body.read end end def delete(key) object_for(key).delete end def exist?(key) object_for(key).exists? end def url(key, expires_in:, disposition:, filename:) object_for(key).presigned_url :get, expires_in: expires_in, response_content_disposition: "#{disposition}; filename=\"#{filename}\"" end private def object_for(key) bucket.object(key) end # Reads the object for the given key in chunks, yielding each to the block. def stream(key, options = {}, &block) object = object_for(key) chunk_size = 5.megabytes offset = 0 while offset < object.content_length yield object.read(options.merge(:range => "bytes=#{offset}-#{offset + chunk_size - 1}")) offset += chunk_size end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
activestorage-0.1 | lib/active_storage/service/s3_service.rb |