class S3Direct::UploadRequest
Attributes
filename[R]
options[R]
path[R]
Public Class Methods
new(path, sanitized_filename, options = {})
click to toggle source
# File lib/s3direct/upload_request.rb, line 5 def initialize(path, sanitized_filename, options = {}) @path = path @filename = sanitized_filename @options = options end
Public Instance Methods
attachment_filename()
click to toggle source
# File lib/s3direct/upload_request.rb, line 39 def attachment_filename options[:attachment_filename].presence end
content_type()
click to toggle source
# File lib/s3direct/upload_request.rb, line 47 def content_type ContentTypeDetection.new(filename, filetype).lookup end
filetype()
click to toggle source
# File lib/s3direct/upload_request.rb, line 43 def filetype options[:filetype].presence end
key()
click to toggle source
# File lib/s3direct/upload_request.rb, line 11 def key ::File.join(@path, @filename) end
max_upload_size()
click to toggle source
# File lib/s3direct/upload_request.rb, line 55 def max_upload_size options.fetch(:max_upload_size, config.max_upload_size) end
s3_acl()
click to toggle source
# File lib/s3direct/upload_request.rb, line 51 def s3_acl options.fetch(:acl, config.default_acl) end
to_json()
click to toggle source
# File lib/s3direct/upload_request.rb, line 15 def to_json data = { url: config.bucket_url, filename: @filename, key: key, policy: s3_upload_policy_document, signature: s3_upload_signature, acl: s3_acl, success_action_status: "200", max_upload_size: max_upload_size, 'AWSAccessKeyId' => config.access_key } if attachment_filename data["Content-Disposition"] = %Q{attachment; filename="#{attachment_filename}"} end if content_type data["Content-Type"] = content_type end data.to_json end
Private Instance Methods
config()
click to toggle source
# File lib/s3direct/upload_request.rb, line 99 def config ::S3Direct.config end
encode(str)
click to toggle source
# File lib/s3direct/upload_request.rb, line 95 def encode(str) Base64.encode64(str).gsub("\n",'') end
s3_upload_policy_document()
click to toggle source
generate the policy document that amazon is expecting.
# File lib/s3direct/upload_request.rb, line 62 def s3_upload_policy_document policy = { 'expiration' => 5.minutes.from_now.utc.xmlschema, 'conditions' => [ {'bucket' => config.bucket}, {'acl' => s3_acl}, {'success_action_status' => '200'}, {'key' => key}, ['content-length-range', 0, max_upload_size] ] } if attachment_filename policy['conditions'] << {"Content-Disposition" => %Q{attachment; filename="#{attachment_filename}"}} end if content_type policy['conditions'] << {"Content-Type" => content_type} end encode(policy.to_json) end
s3_upload_signature()
click to toggle source
sign our request by Base64 encoding the policy document.
# File lib/s3direct/upload_request.rb, line 86 def s3_upload_signature signature = OpenSSL::HMAC.digest( OpenSSL::Digest.new('sha1'), config.secret_key, s3_upload_policy_document ) encode(signature) end