lib/fog/aliyun/requests/storage/put_object.rb in fog-aliyun-0.3.10 vs lib/fog/aliyun/requests/storage/put_object.rb in fog-aliyun-0.3.11

- old
+ new

@@ -1,22 +1,20 @@ # frozen_string_literal: true module Fog - module Storage - class Aliyun + module Aliyun + class Storage class Real # Put details for object # # ==== Parameters # * object<~String> - Name of object to look for # def put_object(object, file = nil, options = {}) bucket = options[:bucket] bucket ||= @aliyun_oss_bucket - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' - return put_folder(bucket, object, endpoint) if file.nil? + return put_folder(bucket, object) if file.nil? # put multiparts if object's size is over 100m return put_multipart_object(bucket, object, file) if file.size > 104_857_600 body = file.read @@ -27,134 +25,118 @@ method: 'PUT', path: object, bucket: bucket, resource: resource, body: body, - endpoint: endpoint + location: get_bucket_location(bucket) ) end def put_object_with_body(object, body, options = {}) bucket = options[:bucket] bucket ||= @aliyun_oss_bucket - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' resource = bucket + '/' + object request( expects: [200, 203], method: 'PUT', path: object, bucket: bucket, resource: resource, body: body, - endpoint: endpoint + location: get_bucket_location(bucket) ) end - def put_folder(bucket, folder, endpoint) - if endpoint.nil? - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' - end + def put_folder(bucket, folder) path = folder + '/' resource = bucket + '/' + folder + '/' request( expects: [200, 203], method: 'PUT', path: path, bucket: bucket, resource: resource, - endpoint: endpoint + location: get_bucket_location(bucket) ) end def put_multipart_object(bucket, object, file) location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' # find the right uploadid - uploads = list_multipart_uploads(bucket, endpoint) + uploads = list_multipart_uploads(bucket, location) upload = (uploads&.find { |tmpupload| tmpupload['Key'][0] == object }) uploadedSize = 0 start_partNumber = 1 if !upload.nil? uploadId = upload['UploadId'][0] - parts = list_parts(bucket, object, endpoint, uploadId) + parts = list_parts(bucket, object, location, uploadId) if !parts.nil? && !parts.empty? if parts[-1]['Size'][0].to_i != 5_242_880 # the part is the last one, if its size is over 5m, then finish this upload - complete_multipart_upload(bucket, object, endpoint, uploadId) + complete_multipart_upload(bucket, object, location, uploadId) return end uploadedSize = (parts[0]['Size'][0].to_i * (parts.size - 1)) + parts[-1]['Size'][0].to_i start_partNumber = parts[-1]['PartNumber'][0].to_i + 1 end else # create upload ID - uploadId = initiate_multipart_upload(bucket, object, endpoint) + uploadId = initiate_multipart_upload(bucket, object, location) end if file.size <= uploadedSize - complete_multipart_upload(bucket, object, endpoint, uploadId) + complete_multipart_upload(bucket, object, location, uploadId) return end end_partNumber = (file.size + 5_242_880 - 1) / 5_242_880 file.seek(uploadedSize) for i in start_partNumber..end_partNumber body = file.read(5_242_880) - upload_part(bucket, object, endpoint, i.to_s, uploadId, body) + upload_part(bucket, object, location, i.to_s, uploadId, body) end - complete_multipart_upload(bucket, object, endpoint, uploadId) + complete_multipart_upload(bucket, object, location, uploadId) end - def initiate_multipart_upload(bucket, object, endpoint) - if endpoint.nil? - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' - end + def initiate_multipart_upload(bucket, object, location) + location ||= get_bucket_location(bucket) path = object + '?uploads' resource = bucket + '/' + path ret = request( expects: 200, method: 'POST', path: path, bucket: bucket, resource: resource, - endpoint: endpoint + location: location ) XmlSimple.xml_in(ret.data[:body])['UploadId'][0] end - def upload_part(bucket, object, endpoint, partNumber, uploadId, body) - if endpoint.nil? - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' - end + def upload_part(bucket, object, location, partNumber, uploadId, body) + location ||= get_bucket_location(bucket) path = object + '?partNumber=' + partNumber + '&uploadId=' + uploadId resource = bucket + '/' + path request( expects: [200, 203], method: 'PUT', path: path, bucket: bucket, resource: resource, body: body, - endpoint: endpoint + location: location ) end - def complete_multipart_upload(bucket, object, endpoint, uploadId) - if endpoint.nil? - location = get_bucket_location(bucket) - endpoint = 'http://' + location + '.aliyuncs.com' - end - parts = list_parts(bucket, object, endpoint, uploadId, options = {}) + def complete_multipart_upload(bucket, object, location, uploadId) + location ||= get_bucket_location(bucket) + parts = list_parts(bucket, object, location, uploadId, options = {}) request_part = [] return if parts.empty? for i in 0..(parts.size - 1) part = parts[i] request_part[i] = { 'PartNumber' => part['PartNumber'], 'ETag' => part['ETag'] } @@ -167,10 +149,10 @@ expects: 200, method: 'POST', path: path, bucket: bucket, resource: resource, - endpoint: endpoint, + location: location, body: body ) end end end