in sdk/storage/azure-storage-files-shares/src/rest_client.cpp [3618:3785]
Response<Models::_detail::FileProperties> FileClient::GetProperties(
Core::Http::_internal::HttpPipeline& pipeline,
const Core::Url& url,
const GetFilePropertiesOptions& options,
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Head, url);
if (options.AllowTrailingDot.HasValue())
{
request.SetHeader(
"x-ms-allow-trailing-dot", options.AllowTrailingDot.Value() ? "true" : "false");
}
if (options.Sharesnapshot.HasValue() && !options.Sharesnapshot.Value().empty())
{
request.GetUrl().AppendQueryParameter(
"sharesnapshot", _internal::UrlEncodeQueryParameter(options.Sharesnapshot.Value()));
}
request.SetHeader("x-ms-version", "2025-05-05");
if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
{
request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
}
if (options.FileRequestIntent.HasValue()
&& !options.FileRequestIntent.Value().ToString().empty())
{
request.SetHeader("x-ms-file-request-intent", options.FileRequestIntent.Value().ToString());
}
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
{
throw StorageException::CreateFromResponse(std::move(pRawResponse));
}
Models::_detail::FileProperties response;
response.LastModified = DateTime::Parse(
pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123);
for (auto i = pRawResponse->GetHeaders().lower_bound("x-ms-meta-");
i != pRawResponse->GetHeaders().end() && i->first.substr(0, 10) == "x-ms-meta-";
++i)
{
response.Metadata.emplace(i->first.substr(10), i->second);
}
response.FileSize = std::stoll(pRawResponse->GetHeaders().at("Content-Length"));
if (pRawResponse->GetHeaders().count("Content-Type") != 0)
{
response.HttpHeaders.ContentType = pRawResponse->GetHeaders().at("Content-Type");
}
response.ETag = ETag(pRawResponse->GetHeaders().at("ETag"));
if (pRawResponse->GetHeaders().count("Content-MD5") != 0)
{
response.HttpHeaders.ContentHash.Value
= Core::Convert::Base64Decode(pRawResponse->GetHeaders().at("Content-MD5"));
response.HttpHeaders.ContentHash.Algorithm = HashAlgorithm::Md5;
}
if (pRawResponse->GetHeaders().count("Content-Encoding") != 0)
{
response.HttpHeaders.ContentEncoding = pRawResponse->GetHeaders().at("Content-Encoding");
}
if (pRawResponse->GetHeaders().count("Cache-Control") != 0)
{
response.HttpHeaders.CacheControl = pRawResponse->GetHeaders().at("Cache-Control");
}
if (pRawResponse->GetHeaders().count("Content-Disposition") != 0)
{
response.HttpHeaders.ContentDisposition
= pRawResponse->GetHeaders().at("Content-Disposition");
}
if (pRawResponse->GetHeaders().count("Content-Language") != 0)
{
response.HttpHeaders.ContentLanguage = pRawResponse->GetHeaders().at("Content-Language");
}
if (pRawResponse->GetHeaders().count("x-ms-copy-completion-time") != 0)
{
response.CopyCompletedOn = DateTime::Parse(
pRawResponse->GetHeaders().at("x-ms-copy-completion-time"),
Azure::DateTime::DateFormat::Rfc1123);
}
if (pRawResponse->GetHeaders().count("x-ms-copy-status-description") != 0)
{
response.CopyStatusDescription
= pRawResponse->GetHeaders().at("x-ms-copy-status-description");
}
if (pRawResponse->GetHeaders().count("x-ms-copy-id") != 0)
{
response.CopyId = pRawResponse->GetHeaders().at("x-ms-copy-id");
}
if (pRawResponse->GetHeaders().count("x-ms-copy-progress") != 0)
{
response.CopyProgress = pRawResponse->GetHeaders().at("x-ms-copy-progress");
}
if (pRawResponse->GetHeaders().count("x-ms-copy-source") != 0)
{
response.CopySource = pRawResponse->GetHeaders().at("x-ms-copy-source");
}
if (pRawResponse->GetHeaders().count("x-ms-copy-status") != 0)
{
response.CopyStatus = Models::CopyStatus(pRawResponse->GetHeaders().at("x-ms-copy-status"));
}
response.IsServerEncrypted
= pRawResponse->GetHeaders().at("x-ms-server-encrypted") == std::string("true");
if (pRawResponse->GetHeaders().count("x-ms-file-attributes") != 0)
{
response.SmbProperties.Attributes
= Models::FileAttributes(pRawResponse->GetHeaders().at("x-ms-file-attributes"));
}
if (pRawResponse->GetHeaders().count("x-ms-file-creation-time") != 0)
{
response.SmbProperties.CreatedOn = DateTime::Parse(
pRawResponse->GetHeaders().at("x-ms-file-creation-time"),
Azure::DateTime::DateFormat::Rfc3339);
}
if (pRawResponse->GetHeaders().count("x-ms-file-last-write-time") != 0)
{
response.SmbProperties.LastWrittenOn = DateTime::Parse(
pRawResponse->GetHeaders().at("x-ms-file-last-write-time"),
Azure::DateTime::DateFormat::Rfc3339);
}
if (pRawResponse->GetHeaders().count("x-ms-file-change-time") != 0)
{
response.SmbProperties.ChangedOn = DateTime::Parse(
pRawResponse->GetHeaders().at("x-ms-file-change-time"),
Azure::DateTime::DateFormat::Rfc3339);
}
if (pRawResponse->GetHeaders().count("x-ms-file-permission-key") != 0)
{
response.SmbProperties.PermissionKey
= pRawResponse->GetHeaders().at("x-ms-file-permission-key");
}
response.SmbProperties.FileId = pRawResponse->GetHeaders().at("x-ms-file-id");
response.SmbProperties.ParentFileId = pRawResponse->GetHeaders().at("x-ms-file-parent-id");
if (pRawResponse->GetHeaders().count("x-ms-lease-duration") != 0)
{
response.LeaseDuration
= Models::LeaseDurationType(pRawResponse->GetHeaders().at("x-ms-lease-duration"));
}
if (pRawResponse->GetHeaders().count("x-ms-lease-state") != 0)
{
response.LeaseState = Models::LeaseState(pRawResponse->GetHeaders().at("x-ms-lease-state"));
}
if (pRawResponse->GetHeaders().count("x-ms-lease-status") != 0)
{
response.LeaseStatus
= Models::LeaseStatus(pRawResponse->GetHeaders().at("x-ms-lease-status"));
}
if (pRawResponse->GetHeaders().count("x-ms-mode") != 0)
{
response.FileMode = pRawResponse->GetHeaders().at("x-ms-mode");
}
if (pRawResponse->GetHeaders().count("x-ms-owner") != 0)
{
response.Owner = pRawResponse->GetHeaders().at("x-ms-owner");
}
if (pRawResponse->GetHeaders().count("x-ms-group") != 0)
{
response.Group = pRawResponse->GetHeaders().at("x-ms-group");
}
if (pRawResponse->GetHeaders().count("x-ms-link-count") != 0)
{
response.LinkCount = std::stoll(pRawResponse->GetHeaders().at("x-ms-link-count"));
}
if (pRawResponse->GetHeaders().count("x-ms-file-file-type") != 0)
{
response.NfsFileType
= Models::NfsFileType(pRawResponse->GetHeaders().at("x-ms-file-file-type"));
}
return Response<Models::_detail::FileProperties>(
std::move(response), std::move(pRawResponse));
}