class Openstack::Client::Storage::PutObject
Uploads a file to the Object
Store. Checksum is validated after upload.
Attributes
checksum[R]
io[R]
uri[R]
Public Class Methods
new(io:, uri:, checksum: nil)
click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 16 def initialize(io:, uri:, checksum: nil) @io = io @uri = uri @checksum = checksum end
Public Instance Methods
request()
click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 22 def request Net::HTTP::Put.new(uri).tap do |request| request.add_field('Content-Type', content_type) request.add_field('ETag', md5_checksum) request.body = io.read end end
Private Instance Methods
checksum_to_hexdigest()
click to toggle source
ActiveStorage
sends a `Digest::MD5.base64digest` checksum OpenStack expects a `Digest::MD5.hexdigest` ETag
# File lib/openstack/client/storage/put_object.rb, line 46 def checksum_to_hexdigest checksum.unpack1('m0').unpack1('H*') end
content_type()
click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 32 def content_type Marcel::MimeType.for io, name: io.try(:original_filename), declared_type: io.try(:content_type) end
md5_checksum()
click to toggle source
# File lib/openstack/client/storage/put_object.rb, line 38 def md5_checksum return checksum_to_hexdigest if checksum.present? Digest::MD5.file(io).hexdigest end