class Oss::Multipart
Attributes
client[RW]
xml_obj[RW]
Public Class Methods
new(client)
click to toggle source
# File lib/oss/multipart.rb, line 12 def initialize(client) @client = client end
Public Instance Methods
abort_multipart_upload(bucket_name, object_name, upload_id)
click to toggle source
# File lib/oss/multipart.rb, line 146 def abort_multipart_upload(bucket_name, object_name, upload_id) client.delete( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}", sign_configs: {resource: "/#{bucket_name}", sign_query_string: true}, query_string: {'uploadId' => upload_id}, ) true end
complete_multipart_upload(bucket_name, object_name, upload_id, parts)
click to toggle source
# File lib/oss/multipart.rb, line 116 def complete_multipart_upload(bucket_name, object_name, upload_id, parts) # build payload xml payload = Nokogiri::XML::Builder.new do CompleteMultipartUpload do parts.each do |part| Part do PartNumber part[:part_number] ETag part[:etag] end end end end @xml_obj = client.post( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}", sign_configs: {resource: "/#{bucket_name}", sign_query_string: true, content_type: 'application/x-www-form-urlencoded',}, query_string: {'uploadId' => upload_id}, payload: payload.to_xml ).xpath('CompleteMultipartUploadResult') # return object info { location: @xml_obj.xpath('Location').text, bucket: @xml_obj.xpath('Bucket').text, key: @xml_obj.xpath('Key').text, etag: @xml_obj.xpath('ETag').text, } end
initiate_multipart_upload(bucket_name, object_name, options = {})
click to toggle source
# File lib/oss/multipart.rb, line 16 def initiate_multipart_upload(bucket_name, object_name, options = {}) # set header headers = Util.hash_filter(options, { expires: 'Expires', content_control: 'Cache-Control', content_encoding: 'Content-Encoding', content_disposition: 'Content-Disposition', encryption: 'x-oss-server-side-encryption', }) # sign configs sign_configs = { resource: "/#{bucket_name}", content_type: 'application/x-www-form-urlencoded', oss_headers: Util.oss_headers_to_s(options, { encryption: 'x-oss-server-side-encryption', }) } @xml_obj = client.post( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}?uploads", headers: headers, sign_configs: sign_configs, ).xpath('InitiateMultipartUploadResult') # return init info { bucket: @xml_obj.xpath('Bucket').text, key: @xml_obj.xpath('Key').text, upload_id: @xml_obj.xpath('UploadId').text, } end
list_multipart_upload(bucket_name, options = {})
click to toggle source
# File lib/oss/multipart.rb, line 158 def list_multipart_upload(bucket_name, options = {}) @xml_obj = client.get( host: "#{bucket_name}.#{client.endpoint}", sign_configs: {resource: "/#{bucket_name}"}, path: '/?uploads', query_string: options ).xpath('ListMultipartUploadsResult') self end
list_parts(bucket_name, object_name, options = {})
click to toggle source
# File lib/oss/multipart.rb, line 184 def list_parts(bucket_name, object_name, options = {}) @xml_obj = client.get( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}", query_string: options, sign_configs: {resource: "/#{bucket_name}", sign_query_string: true}, ).xpath('ListPartsResult') self end
method_missing(method)
click to toggle source
Calls superclass method
# File lib/oss/multipart.rb, line 212 def method_missing(method) if @xml_obj.nil? super else camel = Util.camelize(method) value = @xml_obj.xpath(camel) raise "missing xml attribute #{camel}" if value.length == 0 value.inner_text end end
parts()
click to toggle source
# File lib/oss/multipart.rb, line 195 def parts parts = @xml_obj.xpath('Part') results = Array.new # parse as array parts.each do |part| results << { part_number: part.xpath('PartNumber').text, last_modified: part.xpath('LastModified').text, etag: part.xpath('ETag').text, size: part.xpath('Size').text, } end results end
upload_part(bucket_name, object_name, upload_id, file, part_number = 1, options = {})
click to toggle source
# File lib/oss/multipart.rb, line 50 def upload_part(bucket_name, object_name, upload_id, file, part_number = 1, options = {}) # sign configs sign_configs = { resource: "/#{bucket_name}", content_type: 'application/x-www-form-urlencoded', content_length_check: true, content_md5_check: options[:content_md5_check], sign_query_string: true } resp = client.put( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}", sign_configs: sign_configs, query_string: {'partNumber' => part_number, 'uploadId' => upload_id}, payload: file, as: :raw ) {etag: resp.headers[:etag], part_number: part_number} end
upload_part_copy(bucket_name, object_name, upload_id, old_bucket, old_object, part_number = 1, options = {})
click to toggle source
# File lib/oss/multipart.rb, line 72 def upload_part_copy(bucket_name, object_name, upload_id, old_bucket, old_object, part_number = 1, options = {}) # copy source format options[:copy_source] = "/#{old_bucket}/#{old_object}" options[:copy_source_range] = "bytes=#{options[:copy_source_begin]}-#{options[:copy_source_end]}" unless options[:copy_source_begin].nil? # set header headers = Util.hash_filter(options, { if_modified_since: 'x-oss-copy-source-if-modified-since', if_unmodified_since: 'x-oss-copy-source-if-unmodified-since', if_match: 'x-oss-copy-source-if-match', if_none_match: 'x-oss-copy-source-if-none-match', copy_source: 'x-oss-copy-source', copy_source_range: 'x-oss-copy-source-range' }) # sign configs sign_configs = { resource: "/#{bucket_name}", sign_query_string: true, content_type: 'application/x-www-form-urlencoded', oss_headers: Util.oss_headers_to_s(options, { if_modified_since: 'x-oss-copy-source-if-modified-since', if_unmodified_since: 'x-oss-copy-source-if-unmodified-since', if_match: 'x-oss-copy-source-if-match', if_none_match: 'x-oss-copy-source-if-none-match', copy_source: 'x-oss-copy-source', copy_source_range: 'x-oss-copy-source-range' }) } @xml_obj = client.put( host: "#{bucket_name}.#{client.endpoint}", path: "/#{object_name}", headers: headers, sign_configs: sign_configs, query_string: {'partNumber' => part_number, 'uploadId' => upload_id}, ) { last_modify: @xml_obj.xpath('CopyPartResult/LastModified').text, etag: @xml_obj.xpath('CopyPartResult/ETag').text, } end
uploads()
click to toggle source
# File lib/oss/multipart.rb, line 169 def uploads uploads = @xml_obj.xpath('Upload') results = Array.new # parse as array uploads.each do |upload| results << { key: upload.xpath('Key').text, upload_id: upload.xpath('UploadId').text, initiated: upload.xpath('Initiated').text, } end results end