in sdk/src/OssClientImpl.cc [1464:1502]
CopyObjectOutcome OssClientImpl::ResumableCopyObject(const MultiCopyObjectRequest& request) const
{
const auto& reqeustBase = static_cast<const OssResumableBaseRequest &>(request);
int code = reqeustBase.validate();
if (code != 0) {
return CopyObjectOutcome(OssError("ValidateError", reqeustBase.validateMessage(code)));
}
auto getObjectMetaReq = GetObjectMetaRequest(request.SrcBucket(), request.SrcKey());
if (request.RequestPayer() == RequestPayer::Requester) {
getObjectMetaReq.setRequestPayer(request.RequestPayer());
}
if (!request.VersionId().empty()) {
getObjectMetaReq.setVersionId(request.VersionId());
}
auto outcome = GetObjectMeta(getObjectMetaReq);
if (!outcome.isSuccess()) {
return CopyObjectOutcome(outcome.error());
}
auto objectSize = outcome.result().ContentLength();
if (objectSize < (int64_t)request.PartSize()) {
auto copyObjectReq = CopyObjectRequest(request.Bucket(), request.Key(), request.MetaData());
copyObjectReq.setCopySource(request.SrcBucket(), request.SrcKey());
if (request.RequestPayer() == RequestPayer::Requester) {
copyObjectReq.setRequestPayer(request.RequestPayer());
}
if (request.TrafficLimit() != 0) {
copyObjectReq.setTrafficLimit(request.TrafficLimit());
}
if (!request.VersionId().empty()) {
copyObjectReq.setVersionId(request.VersionId());
}
return CopyObject(copyObjectReq);
}
ResumableCopier copier(request, this, objectSize);
return copier.Copy();
}