|
|
@@ -148,9 +148,13 @@ func (bucket Bucket) copyFile(srcBucketName, srcObjectKey, destBucketName, destO
|
|
|
srcBucket, err := bucket.Client.Bucket(srcBucketName)
|
|
|
listener := getProgressListener(options)
|
|
|
|
|
|
- // for get whole length
|
|
|
- skipOptions := deleteOption(options, HTTPHeaderRange)
|
|
|
- meta, err := srcBucket.GetObjectDetailedMeta(srcObjectKey, skipOptions...)
|
|
|
+ // choice valid options
|
|
|
+ headerOptions := ChoiceHeadObjectOption(options)
|
|
|
+ partOptions := ChoiceTransferPartOption(options)
|
|
|
+ completeOptions := ChoiceCompletePartOption(options)
|
|
|
+ abortOptions := ChoiceAbortPartOption(options)
|
|
|
+
|
|
|
+ meta, err := srcBucket.GetObjectDetailedMeta(srcObjectKey, headerOptions...)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -178,11 +182,8 @@ func (bucket Bucket) copyFile(srcBucketName, srcObjectKey, destBucketName, destO
|
|
|
event := newProgressEvent(TransferStartedEvent, 0, totalBytes, 0)
|
|
|
publishProgress(listener, event)
|
|
|
|
|
|
- // oss server don't support x-oss-storage-class
|
|
|
- options = deleteOption(options, HTTPHeaderOssStorageClass)
|
|
|
-
|
|
|
// Start to copy workers
|
|
|
- arg := copyWorkerArg{descBucket, imur, srcBucketName, srcObjectKey, options, copyPartHooker}
|
|
|
+ arg := copyWorkerArg{descBucket, imur, srcBucketName, srcObjectKey, partOptions, copyPartHooker}
|
|
|
for w := 1; w <= routines; w++ {
|
|
|
go copyWorker(w, arg, jobs, results, failed, die)
|
|
|
}
|
|
|
@@ -204,7 +205,7 @@ func (bucket Bucket) copyFile(srcBucketName, srcObjectKey, destBucketName, destO
|
|
|
publishProgress(listener, event)
|
|
|
case err := <-failed:
|
|
|
close(die)
|
|
|
- descBucket.AbortMultipartUpload(imur, options...)
|
|
|
+ descBucket.AbortMultipartUpload(imur, abortOptions...)
|
|
|
event = newProgressEvent(TransferFailedEvent, completedBytes, totalBytes, 0)
|
|
|
publishProgress(listener, event)
|
|
|
return err
|
|
|
@@ -219,9 +220,9 @@ func (bucket Bucket) copyFile(srcBucketName, srcObjectKey, destBucketName, destO
|
|
|
publishProgress(listener, event)
|
|
|
|
|
|
// Complete the multipart upload
|
|
|
- _, err = descBucket.CompleteMultipartUpload(imur, ups, options...)
|
|
|
+ _, err = descBucket.CompleteMultipartUpload(imur, ups, completeOptions...)
|
|
|
if err != nil {
|
|
|
- bucket.AbortMultipartUpload(imur, options...)
|
|
|
+ bucket.AbortMultipartUpload(imur, abortOptions...)
|
|
|
return err
|
|
|
}
|
|
|
return nil
|
|
|
@@ -398,10 +399,12 @@ func (bucket Bucket) copyFileWithCp(srcBucketName, srcObjectKey, destBucketName,
|
|
|
os.Remove(cpFilePath)
|
|
|
}
|
|
|
|
|
|
- // Make sure the object is not updated.
|
|
|
- // get whole length
|
|
|
- skipOptions := deleteOption(options, HTTPHeaderRange)
|
|
|
- meta, err := srcBucket.GetObjectDetailedMeta(srcObjectKey, skipOptions...)
|
|
|
+ // choice valid options
|
|
|
+ headerOptions := ChoiceHeadObjectOption(options)
|
|
|
+ partOptions := ChoiceTransferPartOption(options)
|
|
|
+ completeOptions := ChoiceCompletePartOption(options)
|
|
|
+
|
|
|
+ meta, err := srcBucket.GetObjectDetailedMeta(srcObjectKey, headerOptions...)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
@@ -431,11 +434,8 @@ func (bucket Bucket) copyFileWithCp(srcBucketName, srcObjectKey, destBucketName,
|
|
|
event := newProgressEvent(TransferStartedEvent, completedBytes, ccp.ObjStat.Size, 0)
|
|
|
publishProgress(listener, event)
|
|
|
|
|
|
- // oss server don't support x-oss-storage-class
|
|
|
- options = deleteOption(options, HTTPHeaderOssStorageClass)
|
|
|
-
|
|
|
// Start the worker coroutines
|
|
|
- arg := copyWorkerArg{descBucket, imur, srcBucketName, srcObjectKey, options, copyPartHooker}
|
|
|
+ arg := copyWorkerArg{descBucket, imur, srcBucketName, srcObjectKey, partOptions, copyPartHooker}
|
|
|
for w := 1; w <= routines; w++ {
|
|
|
go copyWorker(w, arg, jobs, results, failed, die)
|
|
|
}
|
|
|
@@ -470,5 +470,5 @@ func (bucket Bucket) copyFileWithCp(srcBucketName, srcObjectKey, destBucketName,
|
|
|
event = newProgressEvent(TransferCompletedEvent, completedBytes, ccp.ObjStat.Size, 0)
|
|
|
publishProgress(listener, event)
|
|
|
|
|
|
- return ccp.complete(descBucket, ccp.CopyParts, cpFilePath, options)
|
|
|
+ return ccp.complete(descBucket, ccp.CopyParts, cpFilePath, completeOptions)
|
|
|
}
|