Microsoft Azure client library for Blob Storage - Azure Blob Storage is Microsoft's object storage solution for the cloud, optimized for storing massive amounts of unstructured data such as text or binary data.
—
This documentation covers the key model classes, properties, and enums used throughout the Azure Storage Blob Java SDK for representing data, configuration, and service responses.
Comprehensive properties and metadata for a blob.
import com.azure.storage.blob.models.BlobProperties;
import java.time.OffsetDateTime;
import java.util.Map;
// Get blob properties
BlobProperties properties = blobClient.getProperties();
// Basic blob information
System.out.println("Blob size: " + properties.getBlobSize() + " bytes");
System.out.println("Blob type: " + properties.getBlobType()); // BLOCK_BLOB, APPEND_BLOB, PAGE_BLOB
System.out.println("ETag: " + properties.getETag());
System.out.println("Last modified: " + properties.getLastModified());
System.out.println("Creation time: " + properties.getCreationTime());
// Content properties
System.out.println("Content type: " + properties.getContentType());
System.out.println("Content encoding: " + properties.getContentEncoding());
System.out.println("Content language: " + properties.getContentLanguage());
System.out.println("Content disposition: " + properties.getContentDisposition());
System.out.println("Cache control: " + properties.getCacheControl());
System.out.println("Content MD5: " + Arrays.toString(properties.getContentMd5()));
// Access tier and archival
System.out.println("Access tier: " + properties.getAccessTier());
System.out.println("Tier inferred: " + properties.getAccessTierInferred());
System.out.println("Tier change time: " + properties.getAccessTierChangeTime());
System.out.println("Archive status: " + properties.getArchiveStatus());
// Versioning and snapshots
System.out.println("Version ID: " + properties.getVersionId());
System.out.println("Is current version: " + properties.isCurrentVersion());
System.out.println("Deleted time: " + properties.getDeletedTime());
System.out.println("Remaining retention days: " + properties.getRemainingRetentionDays());
// Lease information
System.out.println("Lease status: " + properties.getLeaseStatus());
System.out.println("Lease state: " + properties.getLeaseState());
System.out.println("Lease duration: " + properties.getLeaseDuration());
// Copy information
System.out.println("Copy ID: " + properties.getCopyId());
System.out.println("Copy status: " + properties.getCopyStatus());
System.out.println("Copy source: " + properties.getCopySource());
System.out.println("Copy progress: " + properties.getCopyProgress());
System.out.println("Copy completion time: " + properties.getCopyCompletionTime());
// Encryption and security
System.out.println("Server encrypted: " + properties.isServerEncrypted());
System.out.println("Encryption key SHA256: " + properties.getEncryptionKeySha256());
System.out.println("Encryption scope: " + properties.getEncryptionScope());
// Compliance and governance
System.out.println("Has legal hold: " + properties.hasLegalHold());
BlobImmutabilityPolicy immutabilityPolicy = properties.getImmutabilityPolicy();
if (immutabilityPolicy != null) {
System.out.println("Immutability expiry: " + immutabilityPolicy.getExpiryTime());
System.out.println("Immutability mode: " + immutabilityPolicy.getPolicyMode());
}
// Metadata and tags
Map<String, String> metadata = properties.getMetadata();
System.out.println("Metadata count: " + metadata.size());
System.out.println("Tag count: " + properties.getTagCount());
// Page blob specific
if (properties.getBlobType() == BlobType.PAGE_BLOB) {
System.out.println("Blob sequence number: " + properties.getBlobSequenceNumber());
}
// Block blob specific
if (properties.getBlobType() == BlobType.BLOCK_BLOB) {
System.out.println("Committed block count: " + properties.getCommittedBlockCount());
}
// Object replication
List<ObjectReplicationPolicy> replicationPolicies = properties.getObjectReplicationSourcePolicies();
if (replicationPolicies != null) {
System.out.println("Object replication policies: " + replicationPolicies.size());
}
System.out.println("Replication destination policy: " + properties.getObjectReplicationDestinationPolicyId());Properties and metadata for a blob container.
import com.azure.storage.blob.models.BlobContainerProperties;
// Get container properties
BlobContainerProperties containerProps = containerClient.getProperties();
// Basic container information
System.out.println("ETag: " + containerProps.getETag());
System.out.println("Last modified: " + containerProps.getLastModified());
System.out.println("Public access: " + containerProps.getPublicAccess());
// Lease information
System.out.println("Lease status: " + containerProps.getLeaseStatus());
System.out.println("Lease state: " + containerProps.getLeaseState());
System.out.println("Lease duration: " + containerProps.getLeaseDuration());
// Security and compliance
System.out.println("Has immutability policy: " + containerProps.hasImmutabilityPolicy());
System.out.println("Has legal hold: " + containerProps.hasLegalHold());
// Encryption
System.out.println("Default encryption scope: " + containerProps.getDefaultEncryptionScope());
System.out.println("Encryption scope override prevented: " +
containerProps.isEncryptionScopeOverridePrevented());
// Metadata
Map<String, String> containerMetadata = containerProps.getMetadata();
System.out.println("Container metadata:");
containerMetadata.forEach((key, value) ->
System.out.println(" " + key + ": " + value));Represents a blob item in listing operations.
import com.azure.storage.blob.models.BlobItem;
import com.azure.storage.blob.models.BlobItemProperties;
// List blobs and examine blob items
PagedIterable<BlobItem> blobs = containerClient.listBlobs();
for (BlobItem blobItem : blobs) {
// Basic blob item information
System.out.println("Blob name: " + blobItem.getName());
System.out.println("Is deleted: " + blobItem.isDeleted());
System.out.println("Snapshot: " + blobItem.getSnapshot());
System.out.println("Version ID: " + blobItem.getVersionId());
System.out.println("Is current version: " + blobItem.isCurrentVersion());
System.out.println("Has versions only: " + blobItem.hasVersionsOnly());
// Blob properties from listing
BlobItemProperties itemProps = blobItem.getProperties();
System.out.println("Size: " + itemProps.getContentLength() + " bytes");
System.out.println("Content type: " + itemProps.getContentType());
System.out.println("Last modified: " + itemProps.getLastModified());
System.out.println("ETag: " + itemProps.getETag());
System.out.println("Blob type: " + itemProps.getBlobType());
System.out.println("Access tier: " + itemProps.getAccessTier());
System.out.println("Server encrypted: " + itemProps.isServerEncrypted());
// Metadata and tags (if requested in list options)
Map<String, String> itemMetadata = blobItem.getMetadata();
if (itemMetadata != null) {
System.out.println("Metadata entries: " + itemMetadata.size());
}
Map<String, String> itemTags = blobItem.getTags();
if (itemTags != null) {
System.out.println("Tag entries: " + itemTags.size());
}
// Object replication
List<ObjectReplicationPolicy> replicationPolicies = blobItem.getObjectReplicationSourcePolicies();
if (replicationPolicies != null) {
System.out.println("Replication policies: " + replicationPolicies.size());
}
}Service-level properties for Azure Blob Storage account.
import com.azure.storage.blob.models.*;
// Get and configure service properties
BlobServiceProperties serviceProps = serviceClient.getProperties();
// Logging configuration
BlobAnalyticsLogging logging = serviceProps.getLogging();
if (logging != null) {
System.out.println("Logging version: " + logging.getVersion());
System.out.println("Delete enabled: " + logging.isDeleteEnabled());
System.out.println("Read enabled: " + logging.isReadEnabled());
System.out.println("Write enabled: " + logging.isWriteEnabled());
BlobRetentionPolicy logRetention = logging.getRetentionPolicy();
if (logRetention != null) {
System.out.println("Log retention enabled: " + logRetention.isEnabled());
System.out.println("Log retention days: " + logRetention.getDays());
}
}
// Metrics configuration
BlobMetrics hourMetrics = serviceProps.getHourMetrics();
if (hourMetrics != null) {
System.out.println("Hour metrics enabled: " + hourMetrics.isEnabled());
System.out.println("Include APIs: " + hourMetrics.isIncludeApis());
BlobRetentionPolicy metricsRetention = hourMetrics.getRetentionPolicy();
if (metricsRetention != null) {
System.out.println("Metrics retention days: " + metricsRetention.getDays());
}
}
BlobMetrics minuteMetrics = serviceProps.getMinuteMetrics();
if (minuteMetrics != null) {
System.out.println("Minute metrics enabled: " + minuteMetrics.isEnabled());
}
// CORS rules
List<BlobCorsRule> corsRules = serviceProps.getCors();
if (corsRules != null) {
System.out.println("CORS rules count: " + corsRules.size());
for (BlobCorsRule corsRule : corsRules) {
System.out.println("Allowed origins: " + corsRule.getAllowedOrigins());
System.out.println("Allowed methods: " + corsRule.getAllowedMethods());
System.out.println("Max age: " + corsRule.getMaxAgeInSeconds());
}
}
// Default service version
System.out.println("Default service version: " + serviceProps.getDefaultServiceVersion());
// Delete retention policy
BlobRetentionPolicy deleteRetention = serviceProps.getDeleteRetentionPolicy();
if (deleteRetention != null) {
System.out.println("Delete retention enabled: " + deleteRetention.isEnabled());
System.out.println("Delete retention days: " + deleteRetention.getDays());
}
// Static website configuration
BlobStaticWebsite staticWebsite = serviceProps.getStaticWebsite();
if (staticWebsite != null) {
System.out.println("Static website enabled: " + staticWebsite.isEnabled());
System.out.println("Index document: " + staticWebsite.getIndexDocument());
System.out.println("Error document: " + staticWebsite.getErrorDocument404Path());
}HTTP headers for blob content.
import com.azure.storage.blob.models.BlobHttpHeaders;
// Create and configure HTTP headers
BlobHttpHeaders headers = new BlobHttpHeaders()
.setContentType("application/pdf")
.setContentLanguage("en-US")
.setContentEncoding("gzip")
.setCacheControl("public, max-age=31536000")
.setContentDisposition("attachment; filename=document.pdf");
// Calculate and set content MD5
byte[] content = Files.readAllBytes(Paths.get("document.pdf"));
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] contentMd5 = md5.digest(content);
headers.setContentMd5(contentMd5);
// Use headers in upload
blobClient.upload(BinaryData.fromBytes(content), true);
blobClient.setHttpHeaders(headers);
// Get current headers
BlobProperties properties = blobClient.getProperties();
System.out.println("Content type: " + properties.getContentType());
System.out.println("Content encoding: " + properties.getContentEncoding());
System.out.println("Content language: " + properties.getContentLanguage());
System.out.println("Content disposition: " + properties.getContentDisposition());
System.out.println("Cache control: " + properties.getCacheControl());
System.out.println("Content MD5: " + Arrays.toString(properties.getContentMd5()));Conditional request parameters for blob operations.
import com.azure.storage.blob.models.BlobRequestConditions;
import java.time.OffsetDateTime;
// Create request conditions for optimistic concurrency control
BlobRequestConditions conditions = new BlobRequestConditions()
.setIfMatch("\"0x8D64EA4B2C6B7A0\"") // Only if ETag matches
.setIfNoneMatch("*") // Only if blob doesn't exist
.setIfModifiedSince(OffsetDateTime.now().minusHours(1)) // Only if modified since
.setIfUnmodifiedSince(OffsetDateTime.now()) // Only if not modified since
.setLeaseId("lease-id-12345") // Only with valid lease
.setTagsConditions("\"environment\" = 'production' AND \"team\" = 'backend'"); // Tag-based conditions
// Use conditions in operations
try {
blobClient.uploadWithResponse(
new BlobParallelUploadOptions(BinaryData.fromString("Updated content"))
.setRequestConditions(conditions),
Duration.ofMinutes(5),
Context.NONE
);
System.out.println("Upload succeeded with conditions");
} catch (BlobStorageException ex) {
if (ex.getStatusCode() == 412) { // Precondition Failed
System.err.println("Conditional operation failed: " + ex.getErrorCode());
} else {
throw ex;
}
}
// Specialized conditions for different blob types
AppendBlobRequestConditions appendConditions = new AppendBlobRequestConditions()
.setIfMatch(currentETag)
.setAppendPositionEqual(expectedOffset) // Append only at specific position
.setMaxSize(100 * 1024 * 1024L); // Ensure blob doesn't exceed 100MB
PageBlobRequestConditions pageConditions = new PageBlobRequestConditions()
.setIfMatch(currentETag)
.setIfSequenceNumberEqual(expectedSequenceNumber) // Page blob sequence number check
.setIfSequenceNumberLessThan(maxSequenceNumber)
.setIfSequenceNumberLessThanOrEqual(limitSequenceNumber);Results from specialized blob operations.
import com.azure.storage.blob.models.*;
// Block blob operation results
BlockBlobItem blockResult = blockBlobClient.upload(BinaryData.fromString("Block content"), true);
System.out.println("Block blob ETag: " + blockResult.getETag());
System.out.println("Last modified: " + blockResult.getLastModified());
System.out.println("Content MD5: " + Arrays.toString(blockResult.getContentMd5()));
System.out.println("Version ID: " + blockResult.getVersionId());
System.out.println("Server encrypted: " + blockResult.isServerEncrypted());
System.out.println("Encryption key SHA256: " + blockResult.getEncryptionKeySha256());
// Append blob operation results
appendBlobClient.create();
AppendBlobItem appendResult = appendBlobClient.appendBlock(BinaryData.fromString("Log entry"));
System.out.println("Append ETag: " + appendResult.getETag());
System.out.println("Last modified: " + appendResult.getLastModified());
System.out.println("Append offset: " + appendResult.getBlobAppendOffset());
System.out.println("Committed block count: " + appendResult.getBlobCommittedBlockCount());
// Page blob operation results
pageBlobClient.create(1024 * 512); // 512KB
PageBlobItem pageResult = pageBlobClient.uploadPages(
new PageRange().setStart(0).setEnd(511),
BinaryData.fromBytes(new byte[512])
);
System.out.println("Page blob ETag: " + pageResult.getETag());
System.out.println("Last modified: " + pageResult.getLastModified());
System.out.println("Blob sequence number: " + pageResult.getBlobSequenceNumber());Information about blob copy operations.
// Start copy operation
String sourceUrl = "https://source.blob.core.windows.net/container/source.txt";
SyncPoller<BlobCopyInfo, Void> copyPoller = blobClient.beginCopy(sourceUrl, Duration.ofMinutes(1));
// Monitor copy progress
while (!copyPoller.poll().getStatus().isComplete()) {
BlobCopyInfo copyInfo = copyPoller.poll().getValue();
System.out.println("Copy ID: " + copyInfo.getCopyId());
System.out.println("Copy status: " + copyInfo.getCopyStatus());
System.out.println("Copy source: " + copyInfo.getCopySource());
if (copyInfo.getTotalBytes() != null && copyInfo.getBytesTransferred() != null) {
long progress = (copyInfo.getBytesTransferred() * 100) / copyInfo.getTotalBytes();
System.out.println("Progress: " + progress + "% (" +
copyInfo.getBytesTransferred() + "/" + copyInfo.getTotalBytes() + " bytes)");
}
if (copyInfo.getCopyStatus() == CopyStatusType.FAILED) {
System.err.println("Copy failed: " + copyInfo.getError());
break;
}
Thread.sleep(1000); // Wait 1 second
}
// Get final copy status
BlobProperties finalProperties = blobClient.getProperties();
System.out.println("Final copy status: " + finalProperties.getCopyStatus());
System.out.println("Copy completion time: " + finalProperties.getCopyCompletionTime());Information about the storage account.
import com.azure.storage.blob.models.StorageAccountInfo;
// Get account information
StorageAccountInfo accountInfo = serviceClient.getAccountInfo();
System.out.println("SKU name: " + accountInfo.getSkuName());
System.out.println("Account kind: " + accountInfo.getAccountKind());
System.out.println("Hierarchical namespace enabled: " + accountInfo.isHierarchicalNamespaceEnabled());
// Account kind values
AccountKind kind = accountInfo.getAccountKind();
switch (kind) {
case STORAGE:
System.out.println("General-purpose v1 account");
break;
case STORAGE_V2:
System.out.println("General-purpose v2 account");
break;
case BLOB_STORAGE:
System.out.println("Blob storage account");
break;
case BLOCK_BLOB_STORAGE:
System.out.println("Premium block blob storage account");
break;
default:
System.out.println("Other account type: " + kind);
}
// SKU name values indicate performance tier
SkuName sku = accountInfo.getSkuName();
System.out.println("Performance tier: " + (sku.toString().contains("Premium") ? "Premium" : "Standard"));Statistics for blob service geo-replication.
import com.azure.storage.blob.models.BlobServiceStatistics;
import com.azure.storage.blob.models.GeoReplication;
// Get service statistics (only available for RA-GRS accounts)
try {
BlobServiceStatistics stats = serviceClient.getStatistics();
GeoReplication geoReplication = stats.getGeoReplication();
if (geoReplication != null) {
System.out.println("Geo-replication status: " + geoReplication.getStatus());
System.out.println("Last sync time: " + geoReplication.getLastSyncTime());
switch (geoReplication.getStatus()) {
case LIVE:
System.out.println("Secondary region is available for read access");
break;
case BOOTSTRAP:
System.out.println("Initial synchronization is in progress");
break;
case UNAVAILABLE:
System.out.println("Secondary region is unavailable");
break;
default:
System.out.println("Unknown replication status: " + geoReplication.getStatus());
}
} else {
System.out.println("Geo-replication not configured");
}
} catch (BlobStorageException ex) {
if (ex.getStatusCode() == 400) {
System.out.println("Statistics not available (account not configured for geo-replication)");
} else {
throw ex;
}
}Represents a blob found by tag-based queries.
import com.azure.storage.blob.models.TaggedBlobItem;
// Find blobs by tags
String tagQuery = "environment='production' AND team='backend'";
PagedIterable<TaggedBlobItem> taggedBlobs = serviceClient.findBlobsByTags(tagQuery);
for (TaggedBlobItem taggedBlob : taggedBlobs) {
System.out.println("Blob name: " + taggedBlob.getName());
System.out.println("Container: " + taggedBlob.getContainerName());
// Access tags
BlobTags tags = taggedBlob.getTags();
Map<String, String> tagMap = tags.toMap();
System.out.println("Tags:");
tagMap.forEach((key, value) -> System.out.println(" " + key + ": " + value));
}Types of blobs supported by Azure Storage.
import com.azure.storage.blob.models.BlobType;
// Check blob type from properties
BlobProperties properties = blobClient.getProperties();
BlobType blobType = properties.getBlobType();
switch (blobType) {
case BLOCK_BLOB:
System.out.println("Block blob - optimized for streaming and general-purpose scenarios");
BlockBlobClient blockClient = blobClient.getBlockBlobClient();
break;
case APPEND_BLOB:
System.out.println("Append blob - optimized for append operations and logging");
AppendBlobClient appendClient = blobClient.getAppendBlobClient();
break;
case PAGE_BLOB:
System.out.println("Page blob - optimized for random read/write operations");
PageBlobClient pageClient = blobClient.getPageBlobClient();
break;
default:
System.out.println("Unknown blob type: " + blobType);
}Storage access tiers for cost optimization.
import com.azure.storage.blob.models.AccessTier;
// Set appropriate access tier based on access patterns
AccessTier tier = determineOptimalTier(blobAccessFrequency);
blobClient.setAccessTier(tier);
// Access tier values and their characteristics
public AccessTier determineOptimalTier(String accessFrequency) {
switch (accessFrequency.toLowerCase()) {
case "frequent":
return AccessTier.HOT; // Highest storage cost, lowest access cost
case "infrequent":
return AccessTier.COOL; // Lower storage cost, higher access cost (30+ days)
case "rarely":
return AccessTier.COLD; // Even lower storage cost (90+ days)
case "archive":
return AccessTier.ARCHIVE; // Lowest storage cost, highest access cost (180+ days)
default:
return AccessTier.HOT;
}
}
// Premium access tiers for premium storage accounts
if (accountInfo.getSkuName().toString().contains("Premium")) {
// Premium tiers: P4, P6, P10, P15, P20, P30, P40, P50, P60, P70, P80
blobClient.setAccessTier(AccessTier.P30); // Premium performance tier
}
// Check current access tier
BlobProperties properties = blobClient.getProperties();
System.out.println("Current access tier: " + properties.getAccessTier());
System.out.println("Tier inferred: " + properties.getAccessTierInferred());
System.out.println("Tier change time: " + properties.getAccessTierChangeTime());
// Archive status for blobs being rehydrated
ArchiveStatus archiveStatus = properties.getArchiveStatus();
if (archiveStatus != null) {
System.out.println("Archive status: " + archiveStatus);
switch (archiveStatus) {
case REHYDRATE_PENDING_TO_HOT:
System.out.println("Blob is being rehydrated to Hot tier");
break;
case REHYDRATE_PENDING_TO_COOL:
System.out.println("Blob is being rehydrated to Cool tier");
break;
case REHYDRATE_PENDING_TO_COLD:
System.out.println("Blob is being rehydrated to Cold tier");
break;
}
}Public access levels for blob containers.
import com.azure.storage.blob.models.PublicAccessType;
// Configure container public access
PublicAccessType publicAccess = PublicAccessType.BLOB;
containerClient.setAccessPolicy(publicAccess, null);
// Public access types
switch (publicAccess) {
case CONTAINER:
System.out.println("Container and blobs can be read by anonymous clients");
// Anonymous clients can:
// - List blobs in the container
// - Read container metadata and properties
// - Read blob data and metadata
break;
case BLOB:
System.out.println("Only blobs can be read by anonymous clients");
// Anonymous clients can:
// - Read blob data and metadata (with direct URL)
// Cannot list blobs or read container properties
break;
case null:
System.out.println("No public access - authentication required");
// All access requires authentication
break;
}
// Check current public access level
BlobContainerProperties containerProps = containerClient.getProperties();
PublicAccessType currentAccess = containerProps.getPublicAccess();
System.out.println("Current public access: " +
(currentAccess != null ? currentAccess : "None"));Lease information for concurrency control.
import com.azure.storage.blob.models.*;
// Check lease status from properties
BlobProperties properties = blobClient.getProperties();
LeaseStatusType leaseStatus = properties.getLeaseStatus();
LeaseStateType leaseState = properties.getLeaseState();
LeaseDurationType leaseDuration = properties.getLeaseDuration();
System.out.println("Lease status: " + leaseStatus);
System.out.println("Lease state: " + leaseState);
System.out.println("Lease duration: " + leaseDuration);
// Lease status interpretation
switch (leaseStatus) {
case LOCKED:
System.out.println("Blob has an active lease");
break;
case UNLOCKED:
System.out.println("Blob is not leased");
break;
}
// Lease state details
switch (leaseState) {
case AVAILABLE:
System.out.println("Blob is available for leasing");
break;
case LEASED:
System.out.println("Blob is currently leased");
break;
case EXPIRED:
System.out.println("Lease has expired but not yet broken");
break;
case BREAKING:
System.out.println("Lease is being broken");
break;
case BROKEN:
System.out.println("Lease has been broken");
break;
}
// Lease duration types
if (leaseDuration != null) {
switch (leaseDuration) {
case INFINITE:
System.out.println("Infinite lease duration");
break;
case FIXED:
System.out.println("Fixed lease duration");
break;
}
}Copy operation status and information.
import com.azure.storage.blob.models.CopyStatusType;
// Monitor copy operation status
BlobProperties properties = blobClient.getProperties();
CopyStatusType copyStatus = properties.getCopyStatus();
if (copyStatus != null) {
switch (copyStatus) {
case PENDING:
System.out.println("Copy operation is in progress");
System.out.println("Progress: " + properties.getCopyProgress());
break;
case SUCCESS:
System.out.println("Copy operation completed successfully");
System.out.println("Copy completion time: " + properties.getCopyCompletionTime());
break;
case ABORTED:
System.out.println("Copy operation was aborted");
System.out.println("Copy status description: " + properties.getCopyStatusDescription());
break;
case FAILED:
System.out.println("Copy operation failed");
System.out.println("Copy status description: " + properties.getCopyStatusDescription());
break;
}
System.out.println("Copy ID: " + properties.getCopyId());
System.out.println("Copy source: " + properties.getCopySource());
}Azure Storage service API versions.
import com.azure.storage.blob.BlobServiceVersion;
// Use latest service version
BlobServiceVersion latest = BlobServiceVersion.getLatest();
System.out.println("Latest service version: " + latest.getVersion());
// Create client with specific service version
BlobServiceClient serviceClient = new BlobServiceClientBuilder()
.connectionString(connectionString)
.serviceVersion(BlobServiceVersion.V2023_11_03)
.buildClient();
// Available versions (subset of most common ones)
BlobServiceVersion[] commonVersions = {
BlobServiceVersion.V2023_11_03, // Latest stable
BlobServiceVersion.V2023_08_03,
BlobServiceVersion.V2023_05_03,
BlobServiceVersion.V2023_01_03,
BlobServiceVersion.V2022_11_02,
BlobServiceVersion.V2021_12_02,
BlobServiceVersion.V2021_10_04,
BlobServiceVersion.V2021_08_06
};
for (BlobServiceVersion version : commonVersions) {
System.out.println("Available version: " + version.getVersion());
}
// Get current service version from client
BlobServiceVersion currentVersion = serviceClient.getServiceVersion();
System.out.println("Client service version: " + currentVersion.getVersion());import com.azure.storage.blob.models.BlobStorageException;
import com.azure.storage.blob.models.BlobErrorCode;
try {
blobClient.upload(BinaryData.fromString("content"), false); // Don't overwrite
} catch (BlobStorageException ex) {
System.err.println("Storage operation failed:");
System.err.println("Status code: " + ex.getStatusCode());
System.err.println("Error code: " + ex.getErrorCode());
System.err.println("Error message: " + ex.getMessage());
System.err.println("Request ID: " + ex.getValue().getRequestId());
// Handle specific error conditions
BlobErrorCode errorCode = ex.getErrorCode();
switch (errorCode) {
case BLOB_ALREADY_EXISTS:
System.err.println("Blob exists - use overwrite option or different name");
break;
case BLOB_NOT_FOUND:
System.err.println("Blob not found - check blob name and container");
break;
case CONTAINER_NOT_FOUND:
System.err.println("Container not found - create container first");
break;
case AUTHENTICATION_FAILED:
System.err.println("Authentication failed - check credentials");
break;
case AUTHORIZATION_FAILURE:
System.err.println("Authorization failed - check permissions");
break;
case REQUEST_BODY_TOO_LARGE:
System.err.println("Request too large - use parallel upload for large files");
break;
case INVALID_BLOB_OR_BLOCK:
System.err.println("Invalid blob or block - check content and size");
break;
case LEASE_ID_MISMATCH:
System.err.println("Lease ID mismatch - provide correct lease ID");
break;
case CONDITION_NOT_MET:
System.err.println("Precondition failed - check conditional parameters");
break;
default:
System.err.println("Other error: " + errorCode);
}
}Represents a byte range for partial blob operations.
import com.azure.storage.blob.models.BlobRange;
// Download specific range of blob
BlobRange range = new BlobRange(1024, 4096L); // Bytes 1024-5119 (4096 bytes)
BinaryData rangeData = blobClient.downloadContentWithResponse(
new BlobDownloadOptions().setRange(range),
Duration.ofMinutes(2),
Context.NONE
).getValue();
System.out.println("Downloaded " + rangeData.getLength() + " bytes from range");
// Range for entire blob from offset
BlobRange fromOffset = new BlobRange(1024); // From byte 1024 to end
BinaryData tailData = blobClient.downloadContentWithResponse(
new BlobDownloadOptions().setRange(fromOffset),
Duration.ofMinutes(2),
Context.NONE
).getValue();
// Use ranges with page blob operations
PageRange pageRange = new PageRange().setStart(0).setEnd(511); // First 512-byte page
pageBlobClient.uploadPages(pageRange, BinaryData.fromBytes(new byte[512]));
// Clear specific page range
PageRange clearRange = new PageRange().setStart(512).setEnd(1023); // Second page
pageBlobClient.clearPages(clearRange);Install with Tessl CLI
npx tessl i tessl/maven-com-azure--azure-storage-blob