GetObjectOutcome OssEncryptionClient::ResumableDownloadObject()

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();
        }
    }
}