lib/fog/aliyun/requests/storage/put_object.rb in fog-aliyun-0.3.18 vs lib/fog/aliyun/requests/storage/put_object.rb in fog-aliyun-0.3.19
- old
+ new
@@ -5,136 +5,30 @@
class Storage
class Real
# Put details for object
#
# ==== Parameters
- # * object<~String> - Name of object to look for
+ # * bucket_name<~String> - Name of bucket to look for
+ # * object_name<~String> - Object of object to look for
+ # * data<~File>
+ # * options<~Hash>
#
- def put_object(object, file = nil, options = {})
- bucket_name = options[:bucket]
- bucket_name ||= @aliyun_oss_bucket
- bucket = @oss_client.get_bucket(bucket_name)
- return bucket.put_object(object) if file.nil?
- # With a single PUT operation you can upload objects up to 5 GB in size.
- if file.size > 5_368_709_120
- bucket.resumable_upload(object, file.path)
- end
- bucket.put_object(object, :file => file.path)
- end
-
- def put_object_with_body(object, body, options = {})
- bucket_name = options[:bucket]
- bucket_name ||= @aliyun_oss_bucket
-
- resource = bucket_name + '/' + object
- request(
- expects: [200, 203],
- method: 'PUT',
- path: object,
- bucket: bucket_name,
- resource: resource,
- body: body
- )
- end
-
- def put_folder(bucket, folder)
- path = folder + '/'
- resource = bucket + '/' + folder + '/'
- request(
- expects: [200, 203],
- method: 'PUT',
- path: path,
- bucket: bucket,
- resource: resource
- )
- end
-
- def put_multipart_object(bucket, object, file)
- # find the right uploadid
- uploads = list_multipart_uploads(bucket)
- 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, 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, uploadId)
- return
+ def put_object(bucket_name, object_name, data, options = {})
+ if data.is_a? ::File
+ @oss_protocol.put_object(bucket_name, object_name, options)do |sw|
+ while line = data.read(16*1024)
+ sw.write(line)
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)
+ content=StringIO.new(data.dup)
+ @oss_protocol.put_object(bucket_name, object_name, options)do |sw|
+ while line=content.read(16*1024)
+ sw.write(line)
+ end
+ end
+ content.close
end
-
- if file.size <= uploadedSize
- complete_multipart_upload(bucket, object, 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, i.to_s, uploadId, body)
- end
-
- complete_multipart_upload(bucket, object, uploadId)
- end
-
- def initiate_multipart_upload(bucket, object)
- path = object + '?uploads'
- resource = bucket + '/' + path
- ret = request(
- expects: 200,
- method: 'POST',
- path: path,
- bucket: bucket,
- resource: resource
- )
- XmlSimple.xml_in(ret.data[:body])['UploadId'][0]
- end
-
- def upload_part(bucket, object, partNumber, uploadId, body)
- path = object + '?partNumber=' + partNumber + '&uploadId=' + uploadId
- resource = bucket + '/' + path
- request(
- expects: [200, 203],
- method: 'PUT',
- path: path,
- bucket: bucket,
- resource: resource,
- body: body
- )
- end
-
- def complete_multipart_upload(bucket, object, uploadId)
- parts = list_parts(bucket, object, 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'] }
- end
- body = XmlSimple.xml_out({ 'Part' => request_part }, 'RootName' => 'CompleteMultipartUpload')
-
- path = object + '?uploadId=' + uploadId
- resource = bucket + '/' + path
- request(
- expects: 200,
- method: 'POST',
- path: path,
- bucket: bucket,
- resource: resource,
- body: body
- )
end
end
end
end
end