in sdk/src/encryption/OssEncryptionClient.cc [358:395]
GetObjectOutcome OssEncryptionClient::ResumableDownloadObject(const DownloadObjectRequest& request) const
{
HeadObjectRequest hRequest(request.Bucket(), request.Key());
if (request.RequestPayer() == RequestPayer::Requester) {
hRequest.setRequestPayer(request.RequestPayer());
}
if (!request.VersionId().empty()) {
hRequest.setVersionId(request.VersionId());
}
auto hOutcome = client_->HeadObject(hRequest);
if (!hOutcome.isSuccess()) {
return GetObjectOutcome(hOutcome.error());
}
auto objectSize = static_cast<uint64_t>(hOutcome.result().ContentLength());
if (objectSize <= request.PartSize()) {
auto gRequest = ConvertToGetObjectRequest(request);
auto gOutcome = GetObjectInternal(gRequest, hOutcome.result());
if (gOutcome.isSuccess()) {
gOutcome.result().setContent(nullptr);
}
return gOutcome;
}
else {
const auto& reqeustBase = static_cast<const OssResumableBaseRequest &>(request);
int code = reqeustBase.validate();
if (code != 0) {
return GetObjectOutcome(OssError("ValidateError", reqeustBase.validateMessage(code)));
}
if (hOutcome.result().UserMetaData().find("client-side-encryption-key") != hOutcome.result().UserMetaData().end()) {
EncryptionResumableDownloader downloader(request, hOutcome.result(), this, client_.get(), objectSize);
return downloader.Download();
}
else {
ResumableDownloader downloader(request, client_.get(), objectSize);
return downloader.Download();
}
}
}