BlobClient
The BlobClient allows you to manipulate Azure Storage
blobs.
using Azure.Core;
using Azure.Core.Pipeline;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Cryptography;
using System;
using System.Buffers;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Azure.Storage.Blobs
{
public class BlobClient : BlobBaseClient
{
private BlockBlobClient _blockBlobClient;
private BlockBlobClient BlockBlobClient {
get {
if (_blockBlobClient == null)
_blockBlobClient = new BlockBlobClient(Uri, ClientConfiguration, ClientSideEncryption);
return _blockBlobClient;
}
}
protected BlobClient()
{
}
public BlobClient(string connectionString, string blobContainerName, string blobName)
: base(connectionString, blobContainerName, blobName)
{
}
public BlobClient(string connectionString, string blobContainerName, string blobName, BlobClientOptions options)
: base(connectionString, blobContainerName, blobName, options)
{
}
public BlobClient(Uri blobUri, BlobClientOptions options = null)
: base(blobUri, options)
{
}
public BlobClient(Uri blobUri, StorageSharedKeyCredential credential, BlobClientOptions options = null)
: base(blobUri, credential, options)
{
}
public BlobClient(Uri blobUri, AzureSasCredential credential, BlobClientOptions options = null)
: base(blobUri, credential, options)
{
}
public BlobClient(Uri blobUri, TokenCredential credential, BlobClientOptions options = null)
: base(blobUri, credential, options)
{
}
internal BlobClient(Uri blobUri, BlobClientConfiguration clientConfiguration, ClientSideEncryptionOptions clientSideEncryption)
: base(blobUri, clientConfiguration, clientSideEncryption)
{
}
public new BlobClient WithSnapshot(string snapshot)
{
return new BlobClient(new BlobUriBuilder(Uri) {
Snapshot = snapshot
}.ToUri(), ClientConfiguration, ClientSideEncryption);
}
public new BlobClient WithVersion(string versionId)
{
return new BlobClient(new BlobUriBuilder(Uri) {
VersionId = versionId
}.ToUri(), ClientConfiguration, ClientSideEncryption);
}
public new BlobClient WithCustomerProvidedKey(CustomerProvidedKey? customerProvidedKey)
{
BlobClientConfiguration blobClientConfiguration = BlobClientConfiguration.DeepCopy(ClientConfiguration);
blobClientConfiguration.CustomerProvidedKey = customerProvidedKey;
Uri uri = Uri;
BlobClientConfiguration clientConfiguration = blobClientConfiguration;
object clientSideEncryption = (object)ClientSideEncryption;
return new BlobClient(uri, clientConfiguration, (clientSideEncryption != null) ? clientSideEncryption.Clone() : null);
}
public new BlobClient WithEncryptionScope(string encryptionScope)
{
BlobClientConfiguration blobClientConfiguration = BlobClientConfiguration.DeepCopy(ClientConfiguration);
blobClientConfiguration.EncryptionScope = encryptionScope;
Uri uri = Uri;
BlobClientConfiguration clientConfiguration = blobClientConfiguration;
object clientSideEncryption = (object)ClientSideEncryption;
return new BlobClient(uri, clientConfiguration, (clientSideEncryption != null) ? clientSideEncryption.Clone() : null);
}
protected internal virtual BlobClient WithClientSideEncryptionOptionsCore(ClientSideEncryptionOptions clientSideEncryptionOptions)
{
return new BlobClient(Uri, ClientConfiguration, clientSideEncryptionOptions);
}
public virtual Response<BlobContentInfo> Upload(Stream content)
{
return Upload(content, CancellationToken.None);
}
public virtual Response<BlobContentInfo> Upload(BinaryData content)
{
return Upload(content, CancellationToken.None);
}
public virtual Response<BlobContentInfo> Upload(string path)
{
return Upload(path, CancellationToken.None);
}
[AsyncStateMachine(typeof(<UploadAsync>d__16))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(Stream content)
{
<UploadAsync>d__16 stateMachine = default(<UploadAsync>d__16);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.content = content;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<UploadAsync>d__17))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(BinaryData content)
{
<UploadAsync>d__17 stateMachine = default(<UploadAsync>d__17);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.content = content;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<UploadAsync>d__18))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(string path)
{
<UploadAsync>d__18 stateMachine = default(<UploadAsync>d__18);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public virtual Response<BlobContentInfo> Upload(Stream content, CancellationToken cancellationToken)
{
return Upload(content, false, cancellationToken);
}
public virtual Response<BlobContentInfo> Upload(BinaryData content, CancellationToken cancellationToken)
{
return Upload(content, false, cancellationToken);
}
public virtual Response<BlobContentInfo> Upload(string path, CancellationToken cancellationToken)
{
return Upload(path, false, cancellationToken);
}
public virtual Task<Response<BlobContentInfo>> UploadAsync(Stream content, CancellationToken cancellationToken)
{
return UploadAsync(content, false, cancellationToken);
}
public virtual Task<Response<BlobContentInfo>> UploadAsync(BinaryData content, CancellationToken cancellationToken)
{
return UploadAsync(content, false, cancellationToken);
}
[AsyncStateMachine(typeof(<UploadAsync>d__24))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(string path, CancellationToken cancellationToken)
{
<UploadAsync>d__24 stateMachine = default(<UploadAsync>d__24);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public virtual Response<BlobContentInfo> Upload(Stream content, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
object obj;
if (!overwrite) {
obj = new BlobRequestConditions();
obj.set_IfNoneMatch((ETag?)new ETag("*"));
} else
obj = null;
return Upload(content, null, null, (BlobRequestConditions)obj, null, null, default(StorageTransferOptions), cancellationToken);
}
public virtual Response<BlobContentInfo> Upload(BinaryData content, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
object obj;
if (!overwrite) {
obj = new BlobUploadOptions();
object obj2 = obj;
BlobRequestConditions blobRequestConditions = new BlobRequestConditions();
blobRequestConditions.set_IfNoneMatch((ETag?)new ETag("*"));
((BlobUploadOptions)obj2).Conditions = blobRequestConditions;
} else
obj = null;
return Upload(content, (BlobUploadOptions)obj, cancellationToken);
}
public virtual Response<BlobContentInfo> Upload(string path, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
object obj;
if (!overwrite) {
obj = new BlobRequestConditions();
obj.set_IfNoneMatch((ETag?)new ETag("*"));
} else
obj = null;
return Upload(path, null, null, (BlobRequestConditions)obj, null, null, default(StorageTransferOptions), cancellationToken);
}
public virtual Task<Response<BlobContentInfo>> UploadAsync(Stream content, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
object obj;
if (!overwrite) {
obj = new BlobRequestConditions();
obj.set_IfNoneMatch((ETag?)new ETag("*"));
} else
obj = null;
return UploadAsync(content, null, null, (BlobRequestConditions)obj, null, null, default(StorageTransferOptions), cancellationToken);
}
public virtual Task<Response<BlobContentInfo>> UploadAsync(BinaryData content, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
object obj;
if (!overwrite) {
obj = new BlobUploadOptions();
object obj2 = obj;
BlobRequestConditions blobRequestConditions = new BlobRequestConditions();
blobRequestConditions.set_IfNoneMatch((ETag?)new ETag("*"));
((BlobUploadOptions)obj2).Conditions = blobRequestConditions;
} else
obj = null;
return UploadAsync(content, (BlobUploadOptions)obj, cancellationToken);
}
[AsyncStateMachine(typeof(<UploadAsync>d__30))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(string path, bool overwrite = false, CancellationToken cancellationToken = default(CancellationToken))
{
<UploadAsync>d__30 stateMachine = default(<UploadAsync>d__30);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.overwrite = overwrite;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public virtual Response<BlobContentInfo> Upload(Stream content, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
return StagedUploadInternal(content, options, false, cancellationToken).EnsureCompleted();
}
public virtual Response<BlobContentInfo> Upload(BinaryData content, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
using (Stream content2 = content.ToStream())
return StagedUploadInternal(content2, options, false, cancellationToken).EnsureCompleted();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Response<BlobContentInfo> Upload(Stream content, BlobHttpHeaders httpHeaders = null, IDictionary<string, string> metadata = null, BlobRequestConditions conditions = null, IProgress<long> progressHandler = null, AccessTier? accessTier = default(AccessTier?), StorageTransferOptions transferOptions = default(StorageTransferOptions), CancellationToken cancellationToken = default(CancellationToken))
{
return StagedUploadInternal(content, new BlobUploadOptions {
HttpHeaders = httpHeaders,
Metadata = metadata,
Conditions = conditions,
ProgressHandler = progressHandler,
AccessTier = accessTier,
TransferOptions = transferOptions
}, false, cancellationToken).EnsureCompleted();
}
public virtual Response<BlobContentInfo> Upload(string path, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
using (FileStream content = new FileStream(path, FileMode.Open, FileAccess.Read))
return StagedUploadInternal(content, options, false, cancellationToken).EnsureCompleted();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Response<BlobContentInfo> Upload(string path, BlobHttpHeaders httpHeaders = null, IDictionary<string, string> metadata = null, BlobRequestConditions conditions = null, IProgress<long> progressHandler = null, AccessTier? accessTier = default(AccessTier?), StorageTransferOptions transferOptions = default(StorageTransferOptions), CancellationToken cancellationToken = default(CancellationToken))
{
using (FileStream content = new FileStream(path, FileMode.Open, FileAccess.Read))
return StagedUploadInternal(content, new BlobUploadOptions {
HttpHeaders = httpHeaders,
Metadata = metadata,
Conditions = conditions,
ProgressHandler = progressHandler,
AccessTier = accessTier,
TransferOptions = transferOptions
}, false, cancellationToken).EnsureCompleted();
}
[AsyncStateMachine(typeof(<UploadAsync>d__36))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(Stream content, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
<UploadAsync>d__36 stateMachine = default(<UploadAsync>d__36);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.content = content;
stateMachine.options = options;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<UploadAsync>d__37))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(BinaryData content, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
<UploadAsync>d__37 stateMachine = default(<UploadAsync>d__37);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.content = content;
stateMachine.options = options;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[ForwardsClientCalls]
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Task<Response<BlobContentInfo>> UploadAsync(Stream content, BlobHttpHeaders httpHeaders = null, IDictionary<string, string> metadata = null, BlobRequestConditions conditions = null, IProgress<long> progressHandler = null, AccessTier? accessTier = default(AccessTier?), StorageTransferOptions transferOptions = default(StorageTransferOptions), CancellationToken cancellationToken = default(CancellationToken))
{
return StagedUploadInternal(content, new BlobUploadOptions {
HttpHeaders = httpHeaders,
Metadata = metadata,
Conditions = conditions,
ProgressHandler = progressHandler,
AccessTier = accessTier,
TransferOptions = transferOptions
}, true, cancellationToken);
}
[AsyncStateMachine(typeof(<UploadAsync>d__39))]
public virtual Task<Response<BlobContentInfo>> UploadAsync(string path, BlobUploadOptions options, CancellationToken cancellationToken = default(CancellationToken))
{
<UploadAsync>d__39 stateMachine = default(<UploadAsync>d__39);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.options = options;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<UploadAsync>d__40))]
[ForwardsClientCalls]
[EditorBrowsable(EditorBrowsableState.Never)]
public virtual Task<Response<BlobContentInfo>> UploadAsync(string path, BlobHttpHeaders httpHeaders = null, IDictionary<string, string> metadata = null, BlobRequestConditions conditions = null, IProgress<long> progressHandler = null, AccessTier? accessTier = default(AccessTier?), StorageTransferOptions transferOptions = default(StorageTransferOptions), CancellationToken cancellationToken = default(CancellationToken))
{
<UploadAsync>d__40 stateMachine = default(<UploadAsync>d__40);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.httpHeaders = httpHeaders;
stateMachine.metadata = metadata;
stateMachine.conditions = conditions;
stateMachine.progressHandler = progressHandler;
stateMachine.accessTier = accessTier;
stateMachine.transferOptions = transferOptions;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<StagedUploadInternal>d__41))]
internal Task<Response<BlobContentInfo>> StagedUploadInternal(Stream content, BlobUploadOptions options, bool async = true, CancellationToken cancellationToken = default(CancellationToken))
{
<StagedUploadInternal>d__41 stateMachine = default(<StagedUploadInternal>d__41);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.content = content;
stateMachine.options = options;
stateMachine.async = async;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<StagedUploadInternal>d__42))]
internal Task<Response<BlobContentInfo>> StagedUploadInternal(string path, BlobUploadOptions options, bool async = true, CancellationToken cancellationToken = default(CancellationToken))
{
<StagedUploadInternal>d__42 stateMachine = default(<StagedUploadInternal>d__42);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response<BlobContentInfo>>.Create();
stateMachine.<>4__this = this;
stateMachine.path = path;
stateMachine.options = options;
stateMachine.async = async;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[ForwardsClientCalls]
public virtual Stream OpenWrite(bool overwrite, BlobOpenWriteOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
{
return OpenWriteInternal(overwrite, options, false, cancellationToken).EnsureCompleted();
}
[AsyncStateMachine(typeof(<OpenWriteAsync>d__44))]
[ForwardsClientCalls]
public virtual Task<Stream> OpenWriteAsync(bool overwrite, BlobOpenWriteOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
{
<OpenWriteAsync>d__44 stateMachine = default(<OpenWriteAsync>d__44);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Stream>.Create();
stateMachine.<>4__this = this;
stateMachine.overwrite = overwrite;
stateMachine.options = options;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<OpenWriteInternal>d__45))]
internal Task<Stream> OpenWriteInternal(bool overwrite, BlobOpenWriteOptions options, bool async, CancellationToken cancellationToken)
{
<OpenWriteInternal>d__45 stateMachine = default(<OpenWriteInternal>d__45);
stateMachine.<>t__builder = AsyncTaskMethodBuilder<Stream>.Create();
stateMachine.<>4__this = this;
stateMachine.overwrite = overwrite;
stateMachine.options = options;
stateMachine.async = async;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
internal PartitionedUploader<BlobUploadOptions, BlobContentInfo> GetPartitionedUploader(StorageTransferOptions transferOptions, UploadTransferValidationOptions validationOptions, ArrayPool<byte> arrayPool = null, string operationName = null)
{
return BlockBlobClient.GetPartitionedUploader(transferOptions, validationOptions, arrayPool, operationName);
}
}
}