in sdk/storage/Azure.Storage.Blobs/src/AppendBlobClient.cs [381:812]
public virtual Response<BlobContentInfo> Create(
AppendBlobCreateOptions options,
CancellationToken cancellationToken = default) =>
CreateInternal(
httpHeaders: options?.HttpHeaders,
metadata: options?.Metadata,
tags: options?.Tags,
conditions: options?.Conditions,
immutabilityPolicy: options?.ImmutabilityPolicy,
legalHold: options?.HasLegalHold,
async: false,
cancellationToken: cancellationToken)
.EnsureCompleted();
/// <summary>
/// The <see cref="CreateAsync(AppendBlobCreateOptions, CancellationToken)"/>
/// operation creates a new 0-length append blob. The content of any existing
/// blob is overwritten with the newly initialized append blob. To add content
/// to the append blob, call the <see cref="AppendBlock(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
/// </summary>
/// <param name="options">
/// Optional parameters.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// A <see cref="Response{BlobContentInfo}"/> describing the
/// newly created append blob.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
public virtual async Task<Response<BlobContentInfo>> CreateAsync(
AppendBlobCreateOptions options,
CancellationToken cancellationToken = default) =>
await CreateInternal(
httpHeaders: options?.HttpHeaders,
metadata: options?.Metadata,
tags: options?.Tags,
conditions: options?.Conditions,
immutabilityPolicy: options?.ImmutabilityPolicy,
legalHold: options?.HasLegalHold,
async: true,
cancellationToken: cancellationToken)
.ConfigureAwait(false);
/// <summary>
/// The <see cref="Create(BlobHttpHeaders, Metadata, AppendBlobRequestConditions, CancellationToken)"/>
/// operation creates a new 0-length append blob. The content of any existing blob is overwritten with
/// the newly initialized append blob. To add content to the append
/// blob, call the <see cref="AppendBlock(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="httpHeaders">
/// Optional standard HTTP header properties that can be set for the
/// new append blob.
/// </param>
/// <param name="metadata">
/// Optional custom metadata to set for this append blob.
/// </param>
/// <param name="conditions">
/// Optional <see cref="AppendBlobRequestConditions"/> to add
/// conditions on the creation of this new append blob.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// A <see cref="Response{BlobContentInfo}"/> describing the
/// newly created append blob.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Response<BlobContentInfo> Create(
BlobHttpHeaders httpHeaders = default,
Metadata metadata = default,
AppendBlobRequestConditions conditions = default,
CancellationToken cancellationToken = default) =>
CreateInternal(
httpHeaders: httpHeaders,
metadata: metadata,
tags: default,
conditions: conditions,
immutabilityPolicy: default,
legalHold: default,
async: false,
cancellationToken: cancellationToken)
.EnsureCompleted();
/// <summary>
/// The <see cref="CreateAsync(BlobHttpHeaders, Metadata, AppendBlobRequestConditions, CancellationToken)"/>
/// operation creates a new 0-length append blob. The content of any existing blob is overwritten with
/// the newly initialized append blob. To add content to the append
/// blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="httpHeaders">
/// Optional standard HTTP header properties that can be set for the
/// new append blob.
/// </param>
/// <param name="metadata">
/// Optional custom metadata to set for this append blob.
/// </param>
/// <param name="conditions">
/// Optional <see cref="AppendBlobRequestConditions"/> to add
/// conditions on the creation of this new append blob.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// A <see cref="Response{BlobContentInfo}"/> describing the
/// newly created append blob.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual async Task<Response<BlobContentInfo>> CreateAsync(
BlobHttpHeaders httpHeaders = default,
Metadata metadata = default,
AppendBlobRequestConditions conditions = default,
CancellationToken cancellationToken = default) =>
await CreateInternal(
httpHeaders: httpHeaders,
metadata: metadata,
tags: default,
conditions: conditions,
async: true,
immutabilityPolicy: default,
legalHold: default,
cancellationToken: cancellationToken)
.ConfigureAwait(false);
/// <summary>
/// The <see cref="CreateIfNotExists(AppendBlobCreateOptions, CancellationToken)"/>
/// operation creates a new 0-length append blob. If the append blob already exists,
/// the content of the existing append blob will remain unchanged. To add content to
/// the append blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="options">
/// Optional parameters.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// If the append blob does not already exist, a <see cref="Response{BlobContentInfo}"/>
/// describing the newly created append blob. Otherwise, <c>null</c>.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
public virtual Response<BlobContentInfo> CreateIfNotExists(
AppendBlobCreateOptions options,
CancellationToken cancellationToken = default) =>
CreateIfNotExistsInternal(
httpHeaders: options?.HttpHeaders,
metadata: options?.Metadata,
immutabilityPolicy: options?.ImmutabilityPolicy,
legalHold: options?.HasLegalHold,
tags: options?.Tags,
async: false,
cancellationToken: cancellationToken)
.EnsureCompleted();
/// <summary>
/// The <see cref="CreateIfNotExistsAsync(AppendBlobCreateOptions, CancellationToken)"/>
/// operation creates a new 0-length append blob. If the append blob already exists,
/// the content of the existing append blob will remain unchanged. To add content to
/// the append blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="options">
/// Optional parameters.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// If the append blob does not already exist, a <see cref="Response{BlobContentInfo}"/>
/// describing the newly created append blob. Otherwise, <c>null</c>.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
public virtual async Task<Response<BlobContentInfo>> CreateIfNotExistsAsync(
AppendBlobCreateOptions options,
CancellationToken cancellationToken = default) =>
await CreateIfNotExistsInternal(
httpHeaders: options?.HttpHeaders,
metadata: options?.Metadata,
tags: options?.Tags,
immutabilityPolicy: options?.ImmutabilityPolicy,
legalHold: options?.HasLegalHold,
async: true,
cancellationToken: cancellationToken)
.ConfigureAwait(false);
/// <summary>
/// The <see cref="CreateIfNotExists(BlobHttpHeaders, Metadata, CancellationToken)"/>
/// operation creates a new 0-length append blob. If the append blob already exists,
/// the content of the existing append blob will remain unchanged. To add content to
/// the append blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="httpHeaders">
/// Optional standard HTTP header properties that can be set for the
/// new append blob.
/// </param>
/// <param name="metadata">
/// Optional custom metadata to set for this append blob.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// If the append blob does not already exist, a <see cref="Response{BlobContentInfo}"/>
/// describing the newly created append blob. Otherwise, <c>null</c>.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Response<BlobContentInfo> CreateIfNotExists(
BlobHttpHeaders httpHeaders = default,
Metadata metadata = default,
CancellationToken cancellationToken = default) =>
CreateIfNotExistsInternal(
httpHeaders: httpHeaders,
metadata: metadata,
tags: default,
immutabilityPolicy: default,
legalHold: default,
async: false,
cancellationToken: cancellationToken)
.EnsureCompleted();
/// <summary>
/// The <see cref="CreateIfNotExistsAsync(BlobHttpHeaders, Metadata, CancellationToken)"/>
/// operation creates a new 0-length append blob. If the append blob already exists,
/// the content of the existing append blob will remain unchanged. To add content to the append
/// blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="httpHeaders">
/// Optional standard HTTP header properties that can be set for the
/// new append blob.
/// </param>
/// <param name="metadata">
/// Optional custom metadata to set for this append blob.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// If the append blob does not already exist, a <see cref="Response{BlobContentInfo}"/>
/// describing the newly created append blob. Otherwise, <c>null</c>.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual async Task<Response<BlobContentInfo>> CreateIfNotExistsAsync(
BlobHttpHeaders httpHeaders = default,
Metadata metadata = default,
CancellationToken cancellationToken = default) =>
await CreateIfNotExistsInternal(
httpHeaders: httpHeaders,
metadata: metadata,
tags: default,
immutabilityPolicy: default,
legalHold: default,
async: true,
cancellationToken: cancellationToken)
.ConfigureAwait(false);
/// <summary>
/// The <see cref="CreateIfNotExistsInternal"/> operation creates a new 0-length
/// append blob. If the append blob already exists, the content of
/// the existing append blob will remain unchanged. To add content to the append
/// blob, call the <see cref="AppendBlockAsync(Stream, byte[], AppendBlobRequestConditions, IProgress{long}, CancellationToken)"/> operation.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/put-blob">
/// Put Blob</see>.
/// </summary>
/// <param name="httpHeaders">
/// Optional standard HTTP header properties that can be set for the
/// new append blob.
/// </param>
/// <param name="metadata">
/// Optional custom metadata to set for this append blob.
/// </param>
/// <param name="tags">
/// The tags to set on this append blob.
/// </param>
/// <param name="immutabilityPolicy">
/// Optional <see cref="BlobImmutabilityPolicy"/> to set on the blob.
/// Note that is parameter is only applicable to a blob within a container that
/// has immutable storage with versioning enabled.
/// </param>
/// <param name="legalHold">
/// Optional. Indicates if a legal hold should be placed on the blob.
/// Note that is parameter is only applicable to a blob within a container that
/// has immutable storage with versioning enabled.
/// </param>
/// <param name="async">
/// Whether to invoke the operation asynchronously.
/// </param>
/// <param name="cancellationToken">
/// Optional <see cref="CancellationToken"/> to propagate
/// notifications that the operation should be cancelled.
/// </param>
/// <returns>
/// If the append blob does not already exist, a <see cref="Response{BlobContentInfo}"/>
/// describing the newly created append blob. Otherwise, <c>null</c>.
/// </returns>
/// <remarks>
/// A <see cref="RequestFailedException"/> will be thrown if
/// a failure occurs.
/// If multiple failures occur, an <see cref="AggregateException"/> will be thrown,
/// containing each failure instance.
/// </remarks>
private async Task<Response<BlobContentInfo>> CreateIfNotExistsInternal(
BlobHttpHeaders httpHeaders,
Metadata metadata,
Tags tags,
BlobImmutabilityPolicy immutabilityPolicy,
bool? legalHold,
bool async,
CancellationToken cancellationToken)
{
using (ClientConfiguration.Pipeline.BeginLoggingScope(nameof(AppendBlobClient)))
{
ClientConfiguration.Pipeline.LogMethodEnter(
nameof(AppendBlobClient),
message:
$"{nameof(Uri)}: {Uri}\n" +
$"{nameof(httpHeaders)}: {httpHeaders}");
string operationName = $"{nameof(AppendBlobClient)}.{nameof(CreateIfNotExists)}";
DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope(operationName);
AppendBlobRequestConditions conditions = new AppendBlobRequestConditions { IfNoneMatch = new ETag(Constants.Wildcard) };
try
{
scope.Start();
Response<BlobContentInfo> response = await CreateInternal(
httpHeaders,
metadata,
tags,
conditions,
immutabilityPolicy,
legalHold,
async,
cancellationToken,
operationName)
.ConfigureAwait(false);
return response;
}
catch (RequestFailedException storageRequestFailedException)
when (storageRequestFailedException.ErrorCode == BlobErrorCode.BlobAlreadyExists)
{
return default;
}
catch (Exception ex)
{
ClientConfiguration.Pipeline.LogException(ex);
scope.Failed(ex);
throw;
}
finally
{
ClientConfiguration.Pipeline.LogMethodExit(nameof(AppendBlobClient));
scope.Dispose();
}
}
}