Class: ActiveStorage::Service::S3Service
- Inherits:
-
ActiveStorage::Service
- Object
- ActiveStorage::Service
- ActiveStorage::Service::S3Service
- Defined in:
- lib/active_storage/service/s3_service.rb
Overview
Wraps the Amazon Simple Storage Service (S3) as a Active Storage service. See ‘ActiveStorage::Service` for the generic API documentation that applies to all services.
Instance Attribute Summary collapse
-
#bucket ⇒ Object
readonly
Returns the value of attribute bucket.
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#upload_options ⇒ Object
readonly
Returns the value of attribute upload_options.
Instance Method Summary collapse
- #delete(key) ⇒ Object
- #download(key) ⇒ Object
- #exist?(key) ⇒ Boolean
- #headers_for_direct_upload(key, content_type:, checksum:) ⇒ Object
-
#initialize(access_key_id:, secret_access_key:, region:, bucket:, upload: {}, **options) ⇒ S3Service
constructor
A new instance of S3Service.
- #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(access_key_id:, secret_access_key:, region:, bucket:, upload: {}, **options) ⇒ S3Service
Returns a new instance of S3Service.
9 10 11 12 13 14 |
# File 'lib/active_storage/service/s3_service.rb', line 9 def initialize(access_key_id:, secret_access_key:, region:, bucket:, upload: {}, **) @client = Aws::S3::Resource.new(access_key_id: access_key_id, secret_access_key: secret_access_key, region: region, **) @bucket = @client.bucket(bucket) @upload_options = upload end |
Instance Attribute Details
#bucket ⇒ Object (readonly)
Returns the value of attribute bucket.
7 8 9 |
# File 'lib/active_storage/service/s3_service.rb', line 7 def bucket @bucket end |
#client ⇒ Object (readonly)
Returns the value of attribute client.
7 8 9 |
# File 'lib/active_storage/service/s3_service.rb', line 7 def client @client end |
#upload_options ⇒ Object (readonly)
Returns the value of attribute upload_options.
7 8 9 |
# File 'lib/active_storage/service/s3_service.rb', line 7 def @upload_options end |
Instance Method Details
#delete(key) ⇒ Object
38 39 40 41 42 |
# File 'lib/active_storage/service/s3_service.rb', line 38 def delete(key) instrument :delete, key do object_for(key).delete end end |
#download(key) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/active_storage/service/s3_service.rb', line 26 def download(key) if block_given? instrument :streaming_download, key do stream(key, &block) end else instrument :download, key do object_for(key).get.body.read.force_encoding(Encoding::BINARY) end end end |
#exist?(key) ⇒ Boolean
44 45 46 47 48 49 50 |
# File 'lib/active_storage/service/s3_service.rb', line 44 def exist?(key) instrument :exist, key do |payload| answer = object_for(key).exists? payload[:exist] = answer answer end end |
#headers_for_direct_upload(key, content_type:, checksum:) ⇒ Object
75 76 77 |
# File 'lib/active_storage/service/s3_service.rb', line 75 def headers_for_direct_upload(key, content_type:, checksum:, **) { "Content-Type" => content_type, "Content-MD5" => checksum } end |
#upload(key, io, checksum: nil) ⇒ Object
16 17 18 19 20 21 22 23 24 |
# File 'lib/active_storage/service/s3_service.rb', line 16 def upload(key, io, checksum: nil) instrument :upload, key, checksum: checksum do begin object_for(key).put(.merge(body: io, content_md5: checksum)) rescue Aws::S3::Errors::BadDigest raise ActiveStorage::IntegrityError end end end |
#url(key, expires_in:, disposition:, filename:, content_type:) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/active_storage/service/s3_service.rb', line 52 def url(key, expires_in:, disposition:, filename:, content_type:) instrument :url, key do |payload| generated_url = object_for(key).presigned_url :get, expires_in: expires_in, response_content_disposition: "#{disposition}; filename=\"#{filename}\"", response_content_type: content_type payload[:url] = generated_url generated_url end end |
#url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/active_storage/service/s3_service.rb', line 64 def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:) instrument :url, key do |payload| generated_url = object_for(key).presigned_url :put, expires_in: expires_in, content_type: content_type, content_length: content_length, content_md5: checksum payload[:url] = generated_url generated_url end end |