in cpp/src/oss.cpp [7460:7591]
PostObjectResponse Alibabacloud_OSS::Client::postObject(
shared_ptr<PostObjectRequest> request,
shared_ptr<Alibabacloud_OSSUtil::RuntimeOptions> runtime) {
request->validate();
runtime->validate();
shared_ptr<map<string, boost::any>> runtime_ = make_shared<
map<string, boost::any>>(map<string, boost::any>(
{{"timeouted", boost::any(string("retry"))},
{"readTimeout", boost::any(Darabonba_Util::Client::defaultNumber(
runtime->readTimeout, _readTimeout))},
{"connectTimeout", boost::any(Darabonba_Util::Client::defaultNumber(
runtime->connectTimeout, _connectTimeout))},
{"httpProxy", boost::any(string(Darabonba_Util::Client::defaultString(
runtime->httpProxy, _httpProxy)))},
{"httpsProxy", boost::any(string(Darabonba_Util::Client::defaultString(
runtime->httpsProxy, _httpsProxy)))},
{"noProxy", boost::any(string(Darabonba_Util::Client::defaultString(
runtime->noProxy, _noProxy)))},
{"maxIdleConns", boost::any(Darabonba_Util::Client::defaultNumber(
runtime->maxIdleConns, _maxIdleConns))},
{"retry", boost::any(map<string, boost::any>(
{{"retryable", !runtime->autoretry
? boost::any()
: boost::any(*runtime->autoretry)},
{"maxAttempts",
boost::any(Darabonba_Util::Client::defaultNumber(
runtime->maxAttempts, make_shared<int>(3)))}}))},
{"backoff",
boost::any(map<string, boost::any>(
{{"policy",
boost::any(string(Darabonba_Util::Client::defaultString(
runtime->backoffPolicy, make_shared<string>("no"))))},
{"period", boost::any(Darabonba_Util::Client::defaultNumber(
runtime->backoffPeriod, make_shared<int>(1)))}}))},
{"ignoreSSL", !runtime->ignoreSSL ? boost::any()
: boost::any(*runtime->ignoreSSL)}}));
shared_ptr<Darabonba::Request> _lastRequest;
shared_ptr<std::exception> _lastException;
shared_ptr<int> _now = make_shared<int>(0);
shared_ptr<int> _retryTimes = make_shared<int>(0);
while (Darabonba::Core::allowRetry(
make_shared<boost::any>((*runtime_)["retry"]), _retryTimes, _now)) {
if (*_retryTimes > 0) {
shared_ptr<int> _backoffTime =
make_shared<int>(Darabonba::Core::getBackoffTime(
make_shared<boost::any>((*runtime_)["backoff"]), _retryTimes));
if (*_backoffTime > 0) {
Darabonba::Core::sleep(_backoffTime);
}
}
_retryTimes = make_shared<int>(*_retryTimes + 1);
try {
shared_ptr<Darabonba::Request> request_ =
make_shared<Darabonba::Request>();
shared_ptr<string> boundary =
make_shared<string>(Darabonba_FileForm::Client::getBoundary());
request_->protocol = *_protocol;
request_->method = "POST";
request_->pathname = string("/");
request_->headers = {
{"host", Alibabacloud_OSSUtil::Client::getHost(
request->bucketName, _regionId, _endpoint, _hostModel)},
{"date", Darabonba_Util::Client::getDateUTCString()},
{"user-agent", getUserAgent()}};
request_->headers.insert(pair<string, string>(
"content-type",
string("multipart/form-data; boundary=") + string(*boundary)));
shared_ptr<map<string, boost::any>> form =
make_shared<map<string, boost::any>>(Darabonba::Converter::merge(
map<string, boost::any>(
{{"OSSAccessKeyId",
!request->header->accessKeyId
? boost::any()
: boost::any(*request->header->accessKeyId)},
{"policy", !request->header->policy
? boost::any()
: boost::any(*request->header->policy)},
{"Signature", !request->header->signature
? boost::any()
: boost::any(*request->header->signature)},
{"key", !request->header->key
? boost::any()
: boost::any(*request->header->key)},
{"success_action_status",
!request->header->successActionStatus
? boost::any()
: boost::any(*request->header->successActionStatus)},
{"file", !request->header->file
? boost::any()
: boost::any(*request->header->file)}}),
Darabonba::Converter::toGenericMap(
Alibabacloud_OSSUtil::Client::toMeta(
request->header->userMeta,
make_shared<string>("x-oss-meta-")))));
request_->body = Darabonba_FileForm::Client::toFileForm(form, boundary);
_lastRequest = request_;
shared_ptr<Darabonba::Response> response_ =
make_shared<Darabonba::Response>(
Darabonba::Core::doAction(request_, runtime_));
shared_ptr<map<string, boost::any>> respMap;
shared_ptr<string> bodyStr = make_shared<string>(
Darabonba_Util::Client::readAsString(response_->body));
if (Darabonba_Util::Client::is4xx(
make_shared<int>(response_->statusCode)) ||
Darabonba_Util::Client::is5xx(
make_shared<int>(response_->statusCode))) {
respMap = make_shared<map<string, boost::any>>(
Alibabacloud_OSSUtil::Client::getErrMessage(bodyStr));
BOOST_THROW_EXCEPTION(Darabonba::Error(map<string, boost::any>(
{{"code", (*respMap)["Code"]},
{"message", (*respMap)["Message"]},
{"data", boost::any(map<string, boost::any>(
{{"httpCode", boost::any(response_->statusCode)},
{"requestId", (*respMap)["RequestId"]},
{"hostId", (*respMap)["HostId"]}}))}})));
}
respMap = make_shared<map<string, boost::any>>(
Darabonba_XML::Client::parseXml(bodyStr, nullptr));
return PostObjectResponse(Darabonba::Converter::merge(
map<string, boost::any>(),
!respMap ? map<string, boost::any>() : *respMap));
} catch (std::exception &e) {
if (Darabonba::Core::isRetryable(e)) {
_lastException = make_shared<std::exception>(e);
continue;
}
BOOST_THROW_EXCEPTION(e);
}
}
BOOST_THROW_EXCEPTION(
Darabonba::UnretryableError(_lastRequest, _lastException));
}