in sdk/storage/azure-storage-files-shares/src/rest_client.cpp [3255:3417]
Response<Models::_detail::CreateFileResult> FileClient::Create(
Core::Http::_internal::HttpPipeline& pipeline,
const Core::Url& url,
const CreateFileOptions& options,
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
if (options.AllowTrailingDot.HasValue())
{
request.SetHeader(
"x-ms-allow-trailing-dot", options.AllowTrailingDot.Value() ? "true" : "false");
}
request.SetHeader("x-ms-version", "2025-05-05");
request.SetHeader("x-ms-content-length", std::to_string(options.FileContentLength));
request.SetHeader("x-ms-type", "file");
if (options.FileContentType.HasValue() && !options.FileContentType.Value().empty())
{
request.SetHeader("x-ms-content-type", options.FileContentType.Value());
}
if (options.FileContentEncoding.HasValue() && !options.FileContentEncoding.Value().empty())
{
request.SetHeader("x-ms-content-encoding", options.FileContentEncoding.Value());
}
if (options.FileContentLanguage.HasValue() && !options.FileContentLanguage.Value().empty())
{
request.SetHeader("x-ms-content-language", options.FileContentLanguage.Value());
}
if (options.FileCacheControl.HasValue() && !options.FileCacheControl.Value().empty())
{
request.SetHeader("x-ms-cache-control", options.FileCacheControl.Value());
}
if (options.FileContentMD5.HasValue()
&& !Core::Convert::Base64Encode(options.FileContentMD5.Value()).empty())
{
request.SetHeader(
"x-ms-content-md5", Core::Convert::Base64Encode(options.FileContentMD5.Value()));
}
if (options.FileContentDisposition.HasValue()
&& !options.FileContentDisposition.Value().empty())
{
request.SetHeader("x-ms-content-disposition", options.FileContentDisposition.Value());
}
for (const auto& p : options.Metadata)
{
request.SetHeader("x-ms-meta-" + p.first, p.second);
}
if (options.FilePermission.HasValue() && !options.FilePermission.Value().empty())
{
request.SetHeader("x-ms-file-permission", options.FilePermission.Value());
}
if (options.FilePermissionFormat.HasValue()
&& !options.FilePermissionFormat.Value().ToString().empty())
{
request.SetHeader(
"x-ms-file-permission-format", options.FilePermissionFormat.Value().ToString());
}
if (options.FilePermissionKey.HasValue() && !options.FilePermissionKey.Value().empty())
{
request.SetHeader("x-ms-file-permission-key", options.FilePermissionKey.Value());
}
if (!options.FileAttributes.empty())
{
request.SetHeader("x-ms-file-attributes", options.FileAttributes);
}
if (options.FileCreationTime.HasValue() && !options.FileCreationTime.Value().empty())
{
request.SetHeader("x-ms-file-creation-time", options.FileCreationTime.Value());
}
if (options.FileLastWriteTime.HasValue() && !options.FileLastWriteTime.Value().empty())
{
request.SetHeader("x-ms-file-last-write-time", options.FileLastWriteTime.Value());
}
if (options.FileChangeTime.HasValue() && !options.FileChangeTime.Value().empty())
{
request.SetHeader("x-ms-file-change-time", options.FileChangeTime.Value());
}
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());
}
if (options.Owner.HasValue() && !options.Owner.Value().empty())
{
request.SetHeader("x-ms-owner", options.Owner.Value());
}
if (options.Group.HasValue() && !options.Group.Value().empty())
{
request.SetHeader("x-ms-group", options.Group.Value());
}
if (options.FileMode.HasValue() && !options.FileMode.Value().empty())
{
request.SetHeader("x-ms-mode", options.FileMode.Value());
}
if (options.NfsFileType.HasValue() && !options.NfsFileType.Value().ToString().empty())
{
request.SetHeader("x-ms-file-file-type", options.NfsFileType.Value().ToString());
}
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Created)
{
throw StorageException::CreateFromResponse(std::move(pRawResponse));
}
Models::_detail::CreateFileResult response;
response.ETag = ETag(pRawResponse->GetHeaders().at("ETag"));
response.LastModified = DateTime::Parse(
pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123);
response.IsServerEncrypted
= pRawResponse->GetHeaders().at("x-ms-request-server-encrypted") == std::string("true");
if (pRawResponse->GetHeaders().count("x-ms-file-permission-key") != 0)
{
response.SmbProperties.PermissionKey
= pRawResponse->GetHeaders().at("x-ms-file-permission-key");
}
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);
}
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-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-file-file-type") != 0)
{
response.NfsFileType
= Models::NfsFileType(pRawResponse->GetHeaders().at("x-ms-file-file-type"));
}
return Response<Models::_detail::CreateFileResult>(
std::move(response), std::move(pRawResponse));
}